欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-10 11:53:07
...

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
相关标签: 汇编语言