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