汇编语言-寻址和处理数据

Emiter0 2020-03-08

and和or指令

  • and 指令:逻辑与指令,按位进行与运算。
    • 例如:and al,11111110B ;将al的第0位设为0。
  • or 指令:逻辑或指令,按位进行或运算。
    • 例如:or al,00000001B ;将al的第0位设为1。

ASCll码

ASCLL码就是一种编码方案所谓编码方案,就是一套规则,它约定了用什么样的信息来表示现实对象。比如说,我们按下键盘的 a 键,这个按键的信息被送入计算机,计算机用ASCLL码的规则对其进行编码,将其转化为61H存储在内存的指定空间中;文本编辑软件从内存中取出61H,将其送到显卡上的显存中;工作在文本模式下的显卡,用ASCLL码的规则解释显存中的内容,61H被当作字符 “a“,显卡驱动显示器,将字符 ”a“ 的图像画在屏幕上。

bx, si, di 和 bp

在8086CPU中,只有4个寄存器可以中在 [...] 中来进行内存单元的寻址。
比如下面的指令都是正确的:

mov ax,[bx]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp]
mov ax,[bp+si]
mov ax,[bp+di]

而下面的指令是错误的:

mov ax,[cx]
mov ax,[ax]
mov ax,[dx]
mov ax,[ds]

[...] 中,这4个寄存器可以单个出现,或只能以4种组合出现:bx 和 si, bx 和 di,bp 和 si,bp 和 di。比如下面的指令是正确的:

mov ax,[bx]
mov ax,[si]
mov ax,[di]
mov ax,[bp]
mov ax,[bx+si]
mov ax,[bx+di]
mov ax,[bp+si]
mov ax,[bp+di]
mov ax,[bx+si+idata]
mov ax.[bx+di+idata]
mov ax,[bp+si+idata]
mov ax,[bp+di+idata]

下面的指令是错误的:

mov ax,[bx+bp]
mov ax,[si+di]

只要在 [...] 中使用寄存器 bp,而指令中没有显性地给出段地址,段地址就默认在 ss 中。比如下面地址:

mov ax,[bp+si+idata]    含义:(ax)=((ss)*16+(bp)+(bp)+(si)+idata)

寻址方式

段地址(SA),偏移地址(EA)

  • 直接寻址:
    • [idata]:EA=idata;SA=(ds)
    • 常用格式 [idata]
  • 寄存器间接寻址
    • [bx],[si],[di],[bp]
    • EA=(bx);SA=(ds)
    • 常用格式 [bx]
  • 寄存器相对寻址
    • [bx+idata],[si+idata],[di+idata],[bp+idata]
    • EA=(bx)+idata;SA=(ds)
    • 结构体常用 [bx].idata
    • 数组常用 idata[si],idata[di]
    • 二维数组常用 [bx][idata]
  • 基址变址寻址
    • [bx+si],[bx+di],[bp+si],[bp+di]
    • EA=(bx)+(si);SA=(ds)
    • 二维数组常用 [bx][si]
  • 相对基址变址寻址
    • [bx+si+diata],[bx+di+idata],[bp+si+idata],[bp+di+idata]
    • EA=(bx)+(si)+idata; SA=(ds)
    • 表格(结构)中的数组项常用 [bx].idata[si]
    • 二维数组常用 idata[bx][si]

指令处理数据大小和div,dd,dup

  • 指令处理数据大小
    • word ptr:单元
    • byte ptr:字节单元
  • div指令
    • div是除法指令,使用div做除法的时候应注意以下问题。
    • 除数:有8位和16位两种,在一个寄存器或内存单元中。
    • 被除数: 默认放在AX或DX和AX中,如果除数为8位,被除数则为16为,默认在AX中存放:如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位。
    • 结果: 如果除数为8位,则AL存储除法操作的商,AH存储除法操作的余数;如果除数为16位,则AX存储除法操作的商,DX存储除法操作的余数。
  • 伪指令 dd
    • dd 是用来定义 dword(double word,双字)型数据的。
  • dup
    • dup 是一个操作符,它是和db,dw,dd 等数据定义伪指令配合使用的,用来进行数据的重复。
    • 比如:db 2 dup (0,1,2) ;定义了6个字节,它们是0,1,2,0,1,2

相关推荐