%title缩略图

王爽汇编+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

上图是先看看加载到内存中的代码,接下来我们让程序断在填充完ffff:0到ffff:b这段内存后面

%title插图%num

可以看到这段连续的内存单元已经被填充了12个数,这12个数分别是1到12。接下来继续走完累加的代码看看最终dx中的结果是多少

%title插图%num

我这里是直接用p指令执行完循环的代码,可以看到上图中执行完后dx的寄存器的内容是0x4e,十进制是78。用python也可以验证一下

%title插图%num

看来是正确的。

发表回复