汇编语言——更灵活定位内存地址(基于8086CPU)

ax用来存放数据,bx存放内存偏移地址,cx存放循环次数,dx?

汇编语言的注释是";"

栈用于暂存数据,因为寄存器有限

1. and和or指令

1.1 and:逻辑与指令,按位与运算,全1为1

  • 例如
mov al, 01100011B
and  al, 00111011B
最后al = 0010011B
  • 通过该指令可以将操作对象的相应位设置为0
and al, 10111111B
就把al的第七位设置为0

1.2 or:逻辑或指令,按位或运算,有1为1

  • 例如
mov al, 01100011B
or     al, 00111011B
最后al=01111011B
  • 通过该指令可以把操作对象相应位设置为1
or al, 01000000B
就把al的第七位设置为1

2. ASCII码

一个ASCII码字符用一个字节表示就够了

2.1 db 'unIX’相当于 “db 75H, 6EH, 49H, 58H”

也就是对应字符的ASCII码

2.2 mov al, ‘a’ 相当于 mov al,61H

2.3 [bx+idata] 偏移地址

  • mov ax, [bx + 200]
  • mov ax, [200 + bx]
  • mov ax, 200[bx]
  • mov ax, [bx].200

2.4 用[bx+idata]的方式进行数组的处理

3. SI和DI寄存器

  • SI和DI是8086CPU中和bx功能相近的寄存器
  • 但是SI和DI不能分成两个八位寄存器使用。
  • [bx+si+idata]和[bx+di+idata] idata指的是一个常量
  • mov ax, [bx+200+si]
  • mov ax, [200+bx+si]
  • mov ax, 200[bx][si]
  • mov ax, [bx].200[si]
  • mov ax, [bx][si].200
  • 常数在后边的话前边要加上一个点

4. 使用双重循环时候cx会被修改

在这里插入图片描述
loop s0的时候会先将cx-1,然后发现cx是ffff,就会变成死循环

  • 把外层的cx的值先存储,当跳出内层循环时,再把外层循环的值恢复

5. 如果程序中经常需要数据来暂存,因为寄存器可能不够用,那可以选择内存,把需要暂存的数据放进内存中。

  • 需要暂存数据的时候,使用栈
  • 例如下边用了栈,暂存cx的值
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值