王爽汇编语言第四版答案解析

本文介绍了CPU的地址线宽度与寻址能力的关系,以及如何根据地址线数量计算可寻址内存单元。同时讲解了数据总线宽度对传输数据量的影响,并通过实例解析了汇编语言中的运算指令,如ADD,以及内存地址的计算方法。内容涵盖了计算机存储的基本概念和汇编语言的基础知识。
摘要由CSDN通过智能技术生成

(暂停更新)

红色的答案

目录

检测点 1.1

检测点 2.1

检测点 2.2

检测点 2.3    


检测点 1.1

(1) 13

如果一个 cpu 有 n 根地址线,则可以说这个 cpu 的地址总线的宽度为 n ,而一根导线可以传送的稳定状态只有两种:高电平和低电平( 1 和 0 ),所以 n 根导线只可以传送 n 位二进制数据。n 位二进制数据可以表示 2 的 n 次方个不同的数,所以有 n 根地址线的 cpu 最多可以寻找 2 的 n 次方个 内存单元。

题目中说这个 cpu 的寻址能力是 8 KB,也就是说它的寻址能力是 8 * 1024 Byte,等于 2 ^ 13 Byte,所以它的地址线有 13 根,也就是说它地址总线的宽度位 13 。

(2) 1024、0、1023 和 (3) 8*1024、1024

电子计算机的最小信息单位是 bit(比特) ,也就是一个二进制位。微型机存储器的存储单元可以存储一个 Byte ,也就是 8 个 bit 。

题目中说1 KB 的存储器,也就是 1024 Byte 的存储器,那自然就可以存储 1024 个 Byte,也就是 8 * 1024 个bit;一个存储单元可以存储一个 Byte ,那1024 Byte 的存储器自然有 1024 个存储单元。编号从 0 开始,和C语言是一样的,所以答案是 从 0 到 1023。

(4) 1024^3、1024^2、1024

进制转换,不会的自己查表

(5)2^6、1、2^4、4

通过题(1)我们可以知道,如果一个 cpu 有 n 根地址线,则可以说这个 cpu 的地址总线的宽度为 n ,而一根导线可以传送的稳定状态只有两种:高电平和低电平( 1 和 0 ),所以 n 根导线只可以传送 n 位二进制数据。n 位二进制数据可以表示 2 的 n 次方个不同的数,所以有 n 根地址线的 cpu 最多可以寻找 2 的 n 次方个 内存单元。

题目中说 地址总线宽度是 16 根,那么它的寻址能力就应该是 2^16 Byte ,同理可得剩下其他的,做一下进制转换就 OK 了。

(6) 1、1、2、2、4

8 根数据总线一次可以传送 一个 8 位二进制数据,一根线传送一位数嘛~~~,也就是说 8 根数据总线一次可以传送 1 个字节(Byte),16根那就是 2 个字节.

题目告诉了数据总线的宽度有几根(8/16),知道如上的基础知识,答案简简单单就出来了。

(7) 512、256

通过第七题可以知道 8086 一次传输的数据是 2 Byte ,80386 是 4 Byte,所以用 1024 分别除以 2 和 4 就可以得到答案。

(8) 二进制

记住就好哦~

检测点 2.1

(1)

 首先需要注意的就是al和ah这种都是作为一个独立的8位寄存器来使用的,cpu再执行指令的时候认为al和ah,两者之间没有关系。

其次需要注意像倒数第二个 add al,al 的情况,此时88H+88H的结果是110H,但是al作为8位寄存器,只能存放两位十六进制的数据,所以最高位的 1 会丢失,只留下 10H。

十六进制计算可以使用这个在线工具:十六进制计算器 | 十六进制数字系统 (purecalculators.com)

mov ax,62627                AX=F4A3H
mov ah,31H                   AX=31A3H
mov al,23H                    AX=3123H
add ax,ax                       AX=6246H
mov bx,826CH               BX=826CH
mov cx,ax                      CX=6246H
mov ax,bx                      AX=826CH
add ax,bx                       AX=04D8H
mov al,bh                       AX=0482H
mov ah,bl                       AX=6C82H
add ah,ah                       AX=D882H
add al,6                          AX=D888H
add al,al                         AX=D810H
mov ax,cx                      AX=6246H
 

(2)答案如下↓(装作是红色的吧)

mov ax,2H  
add ax,ax
add ax,ax
add ax,ax

第一行:ax等于2

第二行:ax等于2+2=4

第三行:ax等于4+4=8

第四行:ax等于8+8=16

检测点 2.2

(1)0010H到1000fH

物理地址 = 段地址 * 16 + 偏移地址

偏移地址16位,变化范围为0~FFFFH(出处 王爽汇编第四版 p25的结论)

物理地址的范围是

最小是偏移地址为0,最大是偏移地址为FFFFH

所以答案为0010H到1000fH

(2)

因为:物理地址 = 段地址 * 16 + 偏移地址

逐步推导:段地址 * 16 = 物理地址 - 偏移地址

                  段地址 = (物理地址 - 偏移地址)/ 16

代入数据:段地址 = (20000H - 偏移地址)/ 16

因为偏移地址的范围是:0~FFFFH

所以想要 SA(段地址)最大,就要让偏移地址最小,

即:当偏移地址为0时,SA = 20000H / 16 = 2000H

同理可知:当偏移地址为FFFFH时,SA = 20000H / 16 - FFFFH / 16 = 2000H - FFFH = 1001H

检测点 2.3    

4次;  第一句语句读取后、第二句语句读取后、第三句语句读取后、第三句语句执行后;0000H

SUB (subtract) 指令:

SUB dst,src 结果是 (dst) = (dst)-(src) 

有关 jmp 的内容移步王爽汇编第四版 p32

由于 8086cpu CS,IP不支持用 MOV 指令来改变他们的值,因此引入 JMP 指令。
jmp ax 在语法上(注意是在语法上)相当于 mov IP,ax

注意 IP 的值每读取一条指令会自动增加

mov ax,bx    : 将 bx 的值赋给 ax;
sub ax,ax     :    将 ax(前)的值减去 ax(后)的值 , 并保存在 ax 中
jmp ax          :    将ax的值赋给ip(指令指针)寄存器

所以上述每一条语句读取后都会修改一次 IP ,而在执行 jmp ax 语句的时候 IP 也会变化,(毕竟这就是这个语句的作用和存在的意义),三次读取后加上一次执行,IP 总共被修改了 4 次。

因为 jmp ax 所以 IP最后的值 就是 ax 的值

又因为 sub ax,ax 使 ax 变成了0000H,

所以最后ip的值为0000H

只要是看过王爽老师的这本《汇编语言》教材后的人,如果他还说这是本垃圾书的话,那我很难相信他是个正常人[如果不是记不住英文字母的第二个字母是什么的话,我一定会用最粗俗的言语、最流行的骂法来形容这类人]。事实证明,此书确实是好评如潮。如果你认为本人是为此书做广告或对本人的说法仍持怀疑态度,那你大可去网上搜索关于此书的资料,从而让事实来说服你自己。 相信大多数看过此书的人都为其没有答案而苦恼,究其原因主要是会认为自己做的答案有错误。本人一开始也是如此,但随着学习的深入,尤其是学会了调试之后,本人就不再为没有答案而苦恼了。题目做的对错与否,上机调试便可验证出来。也许一位网友说的对:从不相信自己到相信自己只是一个时间长短的问题。因此,本人预祝大家在学习的过程中能够在尽量短的时间内实现'不相信自己'到'相信自己'的过渡。 曾和王爽老师的两个学生有过交流,问他们为什么此书没有答案。他们说这是王爽老师特意不公开答案的,而目的就是希望这样能够促使读者上机实践进行答案的验证。本人不知道自己的这种做法是否会破坏王爽老师的初衷。但多说无益,现实已经如此,要想让“熟饭变回生米”的事情发生,应该是不可能的。 基于上述,本人便将自己在学习此书时所做的答案及一些个人经验进行了整理并编辑成集,发布于网上,提供给需要帮助的人。由于这并非王爽老师提供的答案,所以本人不敢保证其中的答案的正确率是百分之百。如果你在对照的过程中,发现了错误的地方,可以写信告知本人,在此先表示感谢。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值