曲曲的秘密学术基地

纯化欲望、坚持严肃性

欢迎!我是曲泽慧(@zququ),目前在深圳(ICBI,BCBDI,SIAT)任职助理研究员。


病毒学、免疫学及结构生物学背景,可以在 RG 上找到我已发表的论文

本站自2019年7月已访问web counter

汇编语言 3.4 3.5 数据段 mov add sub

3.4 mov, add, sub指令

mov 寄存器,数据 —> mov ax, 8

mov 寄存器,寄存器 —> mov ax, bx

mov 寄存器,内存单元 —> mov ax, [0]

mov 内存单元,寄存器 —> mov [0], ax

mov 段寄存器,寄存器 —> mov ds, ax

mov 寄存器,段寄存器 —> mov ax, ds

mov 内存单元,段寄存器—> mov [0], cs

mov 段寄存器,内存单元—> mov ds, [0]

3.5 数据段

对于8086PC, 可以将一组长度为N(N<=64KB)、地址连续、起始地址为16的倍数的内存你单元当做专门存储数据的内存空间,从而定义一个数据段。例如,用123B0H~123B9H这段内存空间来存放数据,我们就可以认为,123B0H~123B9H这段内存是一个数据段,它的地址为123BH,长度为10个字节。

解释:

  1. 长度最大值为64KB,因为最大寻址能力为$2^16-10$ = 64KB。
  2. 123B0H, 段地址为123B,偏移地址为0~9所以为10个字节。

如何访问数据段中的数据呢?将一段内存你当做数据段,是我们再编程时的一种安排,可以在具体操作的时候,用ds存放数据段的段地址,再根据需要,用相关指令访问数据段中的具体单元。

比如,将123B0H~123B9H的内存单元定义为数据段。现在要累加这个数据段中的前三个单元数据:

mov ax, 123BH
mov ds, ax
mov al, 0     #这行以及下行可以合并为mov al, [0]
add al, [0]
add al, [1]
add al, [2]

值得注意的是,如果要求累加3个字型数据,代码会发生改变:

mov ax, 123BH
mov ds, ax
mov ax, 0
add ax, [0]
add ax, [2]
add ax, [4]

注意这里,一个字型占用两个单元,所以偏移地址是0, 2, 4。

Last One

在mac或者linux运行debug的优雅解决方案

I want to run debug in mac or linux sys, however, debug is only designed for windows.There are two ways: Just install the win virtual box (Recommend) install DOS virtual box DOSBox hereFor the DOSBoxWhen you have installed the DOSBox, firstly mo...…

汇编语言More
Next One

汇编语言 3.1 3.2 3.3 内存中字的存储 DS [assdress] 字的传送

第二章中,主要讲CPU如何执行指令的角度讲解了8086的逻辑结构、形成物理地址的方法、相关的寄存器以及一些指令。这一章将从访问内存的角度继续学习几个寄存器。3.1 内存中字的存储 0 20H 1 4EH 2 12H 3 00H 4   4   本例中,我们用0、1两个内存...…

汇编语言More