UNIT FIVE TO EIGHT
内存单元间接表示
mov dl, [0] :直接寻址
mov bx, 0
mov dl, [bx]:间接寻址
loop指令
1.语法
loop 标号
2.CPU执行指令过程
① (cx) ← (cx) - 1
② 判断cx的值是否为0。
如果(cx) ≠ 0,跳转到标号处执行;
如果(cx) = 0, 执行loop后面的其它指令。
例(常用)
mov cx,次数
...
loop 标号
inc指令
Tips
默认情形下,无论是直接给出的偏移地址,还是通过bx间接给出的偏移地址,都是取ds的值作为段地址来计算物理地址。
可以通过增加「段前缀」改变默认状况。
伪指令
在代码段中用栈
示例:
advantage
① 程序结构清晰
② 对于8086而言,可以使用多个段,解决长度超64KB的限制问题
代码、数据、栈tips
① 使用伪指令segment和ends定义逻辑段后,究竟是用作代码段、数据段还是栈,由程序员指定。
② 使用assume仅仅表示将某个逻辑段和某个段寄存器关联起来;真正当作特定的段使用,需要在代码段中设置相应的段寄存器值,如ds, ss。
③ 段名代表的是段地址,是常数。不能使用mov直接送入段寄存器。
and&or指令
and
and是按位逻辑与,即都为一才赋一
用法:
① and指令语法格式及对操作数要求与add指令同
② 可以实现将操作数指定位设置为0
or
or是按位逻辑或,即有一即赋一
用法:
① or指令语法格式及对操作数要求与add指令同
② 可以实现将操作数指定位设为1
应用:
字母大小写的转换:
数字字符与数值的转换
其他灵活的内存地址表示
用[bx + idata]表示表示内存单元。idata表示常数。
用[si]表示表示内存单元。
用[si + idata]表示表示内存单元。idata表示常量。
用[di]表示表示内存单元。
用[di + idata]表示表示内存单元。idata表示常量。
用[bx+di], [bx+si]表示表示内存单元。
用[bx+di+idata], [bx+si+idata]表示表示内存单元。
其他