and 和 or 指令
将 al 和操作数进行按位与。
x86asm
1 | mov al, 01100011b |
将 al 和操作数进行按位或。
x86asm
1 | mov al, 01100011b |
以字符的形式给出数据
x86asm
1 | db 'unIX' |
相当于
x86asm
1 | db 75h, 6eh, 49h, 58h |
x86asm
1 | mov al, 'a' |
相当于
x86asm
1 | mov al, 61h |
[bx+idata]
[bx+idata]
表示一个内存单元,它的偏移地址为 (bx) + idata
。
将一个内存单元的内容送入 ax,内存单元长度为一个字,偏移地址为 bx 中的数值加上 200,段地址在 ds 中。
x86asm
1 | mov ax, [bx+200] |
字符串大小写转换问题
x86asm
1 | cs:codesg, ds:datasg |
SI 和 DI
si、di 与 bx 功能相近,但 si、di 不能分成两个 8 位寄存器使用。
以下三组指令实现相同的功能:
x86asm
1 | mov bx, 0 |
x86asm
1 | mov si, 0 |
x86asm
1 | mov di, 0 |
以下三组指令实现相同的功能:
x86asm
1 | mov bx, 0 |
x86asm
1 | mov si, 0 |
x86asm
1 | mov di, 0 |
利用 si、di 复制数据:
x86asm
1 | cs:code,ds:data |
[bx+si] 和 [bx+di]
[bx+si]
表示一个内存单元,它的偏移地址为 (bx) + (si)
,即 bx 中的数值加上 si 中的数值。
将一个内存单元的内容送入 ax,这个内存单元的长度为 2 字节,存放一个字,偏移地址为 bx 中的数值加上 si 中的数值,段地址在 ds 中。
x86asm
1 | mov ax, [bx+si] |
也可以写作:
x86asm
1 | mov ax, [bx][si] |
[bx+si+idata] 和 [bx+di+idata]
将一个内存单元的内容送入 ax,这个内存单元的长度为 2 字节,存放一个字,偏移地址为 bx 中的数值加上 si 中的数值再加上 idata,段地址在 ds 中。
x86asm
1 | mov ax, [bx+200+si] |
不同寻址方式的灵活应用
寻址方式总结:
[idata]
用一个常量表示地址,直接定位一个内存单元[bx]
用一个变量表示地址,间接定位一个内存单元[bx+idata]
用一个变量和一个常量表示地址,在一个起始地址的基础上用一个变量间接定位一个内存单元[bx+si]
用两个变量表示地址[bx+si+idata]
用两个变量和一个常量表示地址
利用栈暂存 cx 计数器来处理双重循环问题:
x86asm
1 | cs:code,ds:data,ss:stack |