![%title缩略图 %title缩略图](https://www.entry0.cn/wp-content/uploads/2020/04/Screenshot_2020-04-30-22-38-08-16-1.png)
王爽汇编+26
王爽汇编学习继续接上,接着上次我们继续学习loop指令和bx寄存器的配合使用
下面有道思考题
写一段程序将ffff:0 – ffff:b这段内存中的数据累加后存到dx寄存器中。
这道题有以下几点需要思考:
1,8086cpu是不支持将8位数直接传送到dx这样的16位寄存器中的
2,dx寄存器是16位,最大值是ffff,能否存放的下这段内存单元中的数据的累加值
思考加分析就能知道dx寄存器完全存的下这段内存数据的累加值。试想一个12个内存单元,每个单元最大是ff,假设碰巧12个单元都是ff那无非也就是12个ff相加,既12乘以255,12*255=3060,十六进制是0xbf4,远不及0xffff,dx能存储最大值是0xffff
下面开始展示我的代码,我为了方便计算,把FFFF:0到FFFF:b这12个内存单元中分别按照顺序写入了1-12
![%title插图%num %title插图%num](https://www.entry0.cn/wp-content/uploads/2020/04/Screenshot_2020-04-30-22-28-39-69.png)
编译链接过程直接省略了
下面进行调试
![%title插图%num %title插图%num](https://www.entry0.cn/wp-content/uploads/2020/04/Screenshot_2020-04-30-22-30-45-39.png)
上图是先看看加载到内存中的代码,接下来我们让程序断在填充完ffff:0到ffff:b这段内存后面
![%title插图%num %title插图%num](https://www.entry0.cn/wp-content/uploads/2020/04/Screenshot_2020-04-30-22-33-39-84.png)
可以看到这段连续的内存单元已经被填充了12个数,这12个数分别是1到12。接下来继续走完累加的代码看看最终dx中的结果是多少
![%title插图%num %title插图%num](https://www.entry0.cn/wp-content/uploads/2020/04/Screenshot_2020-04-30-22-35-44-91.png)
我这里是直接用p指令执行完循环的代码,可以看到上图中执行完后dx的寄存器的内容是0x4e,十进制是78。用python也可以验证一下
![%title插图%num %title插图%num](https://www.entry0.cn/wp-content/uploads/2020/04/Screenshot_2020-04-30-22-38-08-16.png)
看来是正确的。