《汇编语言》王爽版 中的一个错误!
在书的52页,检测点3.1
第一小题
题目给出
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88
问题:
mov ax,1 (这地放应该是 mov ax,0 ,否则后面的就没法做了)
mov ds,ax
mov ax,[0000] ax=?
..................
第二小题
我发现只能执行右边的代码,左边的代码永远也执行不到!
望有这本书的朋友们一起讨论!
问题点数:20、回复次数:25Top
1 楼mydo(侯佩|hopy|ks)回复于 2006-02-23 20:04:15 得分 0
木有,帮顶Top
2 楼DelphiGuy()回复于 2006-02-23 21:30:30 得分 0
mov ax,1
mov ds,ax
应该没有问题,之后的mov ax,[0000]就是ax=2662。
Top
3 楼lynx090(黑色的风)回复于 2006-02-23 23:26:53 得分 0
这本书我看过,非常适合汇编入门的,我记得讲CPU执行指令流程,作者就用了很多图来描述,实在是难得的一本好书.Top
4 楼GodSpeed513(GodSpeed513)回复于 2006-02-24 11:17:59 得分 0
DelphiGuy,你说的我不理解!
我认为
mov ax,1
mov ds,ax
mov ax,[0000]
那么访问的地址就应该是 0001:0000Top
5 楼DelphiGuy()回复于 2006-02-24 13:09:12 得分 5
在实模式下,0001:0000 = 0000:0010。:)
Top
6 楼koalapheonix()回复于 2006-02-24 22:52:22 得分 0
DelphiGuy说的是对的
我认为
书应该没有问题Top
7 楼GodSpeed513(GodSpeed513)回复于 2006-02-25 11:40:28 得分 0
谢谢DelphiGuy,我用DEBUG看过了,的确象你说的0001:0000 = 0000:0010,可以给我解释一下原理吗?
还有就是第二小题,也帮我解答一下!谢谢了!Top
8 楼DelphiGuy()回复于 2006-02-25 11:51:42 得分 0
x86的实模式是seg * 16 + offset形成物理地址,所以就是那样子了。
另外我没有这本书,所以不知道第二小题是什么。
Top
9 楼chw_csdn_chw(chw)回复于 2006-02-27 11:11:12 得分 0
0001:0000 = 0000:0010
是怎么转换的?Top
10 楼zquboy()回复于 2006-02-27 22:35:47 得分 5
0001:0000 = 0000:0010
0001:0000物理地址 => 00010
0000:0010物理地址 => 00010
原理,段值 * 16,其实是左1位,只要在段值后加一个0,然后和偏移相加。
另外,逻辑段的开始地址必须为16的倍数,所以0001自然就是0000的1个倍数了。Top
11 楼jy02870694(逍遥)回复于 2006-02-28 14:26:46 得分 0
请问楼主和大家,这本书第18页检测点2.1
(2)编程计算2的4次方?
23页 给定段地址1000H,用偏移地址寻址,CPU的寻址范围为:10000H~1FFFFH ?CPU寻址范围是怎么得出来的,请给予解释一下?在此先感谢。
我在这被卡住了,无法继续学下去Top
12 楼DelphiGuy()回复于 2006-02-28 16:18:52 得分 0
1. mov ax,2
mov cl,3
shl ax,cl
2.
一个段内的偏移只能是0000h-ffffh,所以1000h段对应的地址就是1000h * 16 + 0000h - 1000h * 16 + 0ffffh。
Top
13 楼jy02870694(逍遥)回复于 2006-03-06 16:26:25 得分 0
谢谢DelphiGuy,再请教本书44页,利用mov add jmp这三个指令计算2的8次方.
Top
14 楼DelphiGuy()回复于 2006-03-07 13:29:10 得分 0
应该不需要用jmp吧。
mov ax,2
add ax,ax
add ax,ax
add ax,ax
add ax,ax
add ax,ax
add ax,ax
add ax,ax
Top
15 楼GodSpeed513(GodSpeed513)回复于 2006-03-07 22:02:31 得分 0
先谢谢DelphiGuy()和zquboy() 两位了!
这本书第18页检测点2.1
我写的
mov ax,2
add ax,ax
add ax,ax
add ax,axTop
16 楼GodSpeed513(GodSpeed513)回复于 2006-03-07 22:13:11 得分 0
第二小题
内存情况如下:
左边
10000H B8
10001H 00
10002H 20 MOV AX,2000H
10003H 8E
10004H D8 MOV DS,AX
10005H A1
10006H 08
10007H 00 MOV AX,[0008]
10008H A1
10009H 02
1000AH 00 MOV AX,[0002]
右边
20000H B8
20001H 22
20002H 66 MOV AX,6622H
20003H EA
20004H 00
20005H 01
20006H F0
20007H 0F JMP 0FF0:0100
20008H 89
20009H C1 MOV BX,AX
各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0
1。写出CPU执行的指令序列(用汇编写)
请大家帮忙看看!谢谢了
Top
17 楼coolswordsman(风寒剑客)回复于 2006-03-09 05:54:08 得分 0
学习中。。呵呵。Top
18 楼jy02870694(逍遥)回复于 2006-03-09 16:20:28 得分 5
各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0
1。写出CPU执行的指令序列(用汇编写)
-----------------------------------------
我做的是:
1、 mov ax,6622
2、 jmp 0ff0:0100
3、 mov ax,2000
4、 mov ds,ax
5、 mov ax,[0008]
6、 mov ax,[0002]
顺便问一下本书61页的 问题3.8
mov ax,1000H
mov ss,ax
mov sp,0010H
mov ax,001AH
mov bx,001BH
push ax
push bx
sub ax,ax
sub bx,bx
pop bx
pop ax
我在机器上试过了,代码根本执行不到mov sp,0010H这句,我把cs=1000,ip=0000,当执行完
mov ax,1000H
ip=0003,
再执行完mov ss,ax这句,
ip=0008了,所以就执行不到mov sp,0010H这句。
mov ss,ax的机器码是两个字节,不应该是5个字节啊
请大家帮忙看看!谢谢了
Top
19 楼GodSpeed513(GodSpeed513)回复于 2006-03-10 09:57:22 得分 0
谢谢jy02870694(逍遥)Top
20 楼q63996955(wolf小强)回复于 2006-03-11 16:54:44 得分 0
恩,小弟正在看那本书,书确实是非常棒,但是其中也确实存在一些小的问题的!Top
21 楼CrazyDogHH3(浪漫如枫)回复于 2006-03-12 18:56:46 得分 0
这本书蛮好的~~可是就是有一个问题到后面代码里面常常用到10进制的看了很是不爽..Top
22 楼paullbm(显示器失明,内存失忆,CPU失针,硬盘失身,网卡失踪!!)回复于 2006-03-13 23:08:09 得分 0
一句话:这页没错。Top
23 楼YYLFYY(云之毅)回复于 2006-03-18 23:19:30 得分 5
To:jy02870694(逍遥)
CPU确实执行了mov sp,0010H这条指令的,只是在Debug中用T命令看不出来,显示直接跳过了这条指令,具体原因请参看《汇编语言》第12章的12小节(响应中断的特殊情况)Top
24 楼fhb13(游途道标)回复于 2006-03-19 12:15:23 得分 0
我看没错Top
25 楼jy02870694(逍遥)回复于 2006-03-20 11:36:43 得分 0
TO:YYLFYY(云之毅)
多谢你的帮助Top




