【汇编语言】王爽第三版----------------检测点2.2

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a851248662/article/details/79320805

检测点2.2


(1).给定段地址为001H,仅通过变化偏移地址,CPU的寻址范围为0010H1000FH
(2).有一段数据存放在内存20000H单元中,现给定段地址为SA,若想用偏移地址寻到此单元。则SA应满足的条件是:最小为1001H,最大为2000H
展开阅读全文

王爽《汇编语言检测点10.4 遇到困难

08-08

内存地址 机器码 汇编指令rn1000:0 b8 00 00 mov ax,6rn1000:2 ff d0 call,axrn1000:5 40 inc axrn1000:6 mov bp,sprnadd ax,[bp]rn==========================以下是ddrmsdos的分析======================rn回复人:ddrmsdos(handong) ( ) 信誉:100 2007-1-10 15:10:07 得分:90 rn rn在执行了rncall axrn的时候rn指令寄存器会指向下一条指令的起始地址,也就是rn1000:5 inc axrn然后指令寄存器ip=5要压入堆栈rn然后跳转到cs:ax指定的地址执行rn又因为此时ax中的值为6 ,cs=1000rn所以跳转到1000:6执行rn于是修改 ip为6rn到此时call ax指令才执行完毕rnrn然后就执行rnmov bp,sprn因为sp里面放的是堆顶的地址,所以bp也是栈顶的地址了rn之后rnadd ax,[bp]rn因为,bp里面放的是栈顶的地址,所以 [bp] 寄存器寻址后 [bp]实际是代表该地址单元的内容,也就是栈顶的内容,因为先前我把ip压入了堆栈,所以[bp]得到的内容就是5(先前在call ax时候压入的ip的值)rnrn所以 ax=ax+[bp]rn也就是 ax=6+5=Brn=================================================rn 关于这句:rnmov bp,sprn因为sp里面放的是堆顶的地址,所以bp也是栈顶的地址了rnrn我不明白啊,sp应该都是放偏移地址的吧?rn那么mov bp,sp应该只是把栈顶的偏移地址传给了bp啊,rn那add ax,[bp] 为什么不等于 add ax,ds:[bp] 而是 add ax,ss:[bp]rnrn我是初学汇编的菜鸟rn rn 论坛

没有更多推荐了,返回首页