栈指令及寻址方式
栈指令及寻址方式
栈指令:
寄存器ss内存放着栈段地址,寄存器sp中保存着相对栈段寄存器ss的偏移地址
1 | push 寄存器/内存 |
- sp = (sp - 操作数的大小) ,在16位8086中压栈出栈必须是一个字
- 段寄存器ss左移4位,加上sp的偏移地址,生成物理地址
- 将操作数写入上述地址中
1 | pop 寄存器/内存 |
- 段寄存器ss左移4位,加上sp里的偏移地址,生成物理地址
- 从上述地址处取得数据,存入由操作数体统的目标位置处
- sp = sp + 2
逻辑指令
1 | or 寄存器/内存 , 寄存器/内存/立即数 |
在执行l逻辑指令后:
OF = 0 CF = 0
SF ZF PF依据计算结果而定,AF的状态未定义
从1加到100并显示结果
1 | ;从1加到100并显示累加结果 |
基址寻址
基址寄存器 bx bp
1 | mov dx , [bp+2];ss为段寄存器 |
不需要使用段超越前缀ss,当使用基址寄存器bp进行寻址时,默认将寄存器ss中内存作为段寄存器
变址寻址
变址寄存器/索引寄存器 si di
1 | mov [si+0x10] , dx |
当指令中使用了变址寄存器并且没有使用段超越前缀,默认以bx中作为段地址
基址变址寻址
当使用基址寄存器bs时,默认使用段寄存器bx作为段地址
1 | [bx + si] |
当使用基址寄存器bp时,默认使用段寄存器ss作为段地址
1 | [bp + si] |
就地反转字符串内容
1 | jmp start; |