鱼C论坛

 找回密码
 立即注册
查看: 15361|回复: 28

[汇编作业] 求汇编检测点3.1答案与解析

[复制链接]
发表于 2014-9-10 12:32:31 | 显示全部楼层 |阅读模式
3鱼币
请前辈指教,关于汇编语言第三版检测点3.1的答案与解析

本帖被以下淘专辑推荐:

  • · 汇编|主题: 1, 订阅: 0
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-8-1 20:25:51 | 显示全部楼层
15801861509 发表于 2014-9-10 20:13
mov ax,[0000]   那么答案是0870H才对啊。为什么是2662H呢。

因为ds=1,偏移等于零的话。就是指向10这个单元又因为是字型,所以要引用高地址的数据。在每一单元中从左往右所以是2662
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-5 02:23:08 | 显示全部楼层
just_it 发表于 2018-2-5 02:18
为什么 mov ax,[0000] ,传输给ax的是2662,为什么跳过了0000:0000到了0000:0010?
另外 -d 0000:0 lf   ...

第一个问题明白了,因为前面有 mov ax,1 然后mov ds,ax
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-2-5 02:18:46 | 显示全部楼层
qkqpihumq 发表于 2014-9-17 10:28
检测点3.1
(1)  在DEBUG中,用 "D 0:0 lf" 查看内存,结果如下:
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 ...

为什么 mov ax,[0000] ,传输给ax的是2662,为什么跳过了0000:0000到了0000:0010?
另外 -d 0000:0 lf  中的lf是什么意思?感谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-11-5 19:51:33 | 显示全部楼层
380683310 发表于 2014-9-24 17:17
前面mov ax,1 mov ds,ax,这两句已经把DS的段地址设置为0001,运行mov ax,[0000]时的物理地址应该为00010, ...

那既然是这样,为什么不是读取0001:0000,而是0000:0010?
题目不是mov ax,[0000]吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-9 11:32:34 | 显示全部楼层
白开水1982 发表于 2015-9-21 19:07
我还是不明白  小甲鱼 能讲讲吗

人家楼上已经剖析的很清楚了,不知道还怎么详细的解释额,只能劝你好好看看基础知识,一点点看,不要贪多冒进就好
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-6-9 11:30:24 | 显示全部楼层

你跳转到ff0:100位置,意味着这个位置你也要有同样的数据和同样的指令,你没发现你跳转过去之后执行的指令发生变化了么?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-2-25 16:02:34 | 显示全部楼层
(1) 在Debug中,用“d 0:0 1f”查看内存,结果如下。
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
下面的程序执行前,AX=0,BX=0,写出每条汇编指令执行完后相关寄存器的值。
mov ax,1
mov ds,ax
mov ax,[0000] AX=2662H
mov bx,[0001] BX=E626H
mov ax,bx AX=E626H
mov ax,[0000] AX=2662H
mov bx,[0002] BX=D6E6H
add ax,bx AX=FD48H
add ax,[0004] AX=2C14H
mov ax,0 AX=0000H
mov al,[0002] AX=00E6H
mov bx,0 BX=0000H
mov bl,[000C] BX=0026H
add al,bl AX=000CH

(2)内存中的情况如图3.6所示
各寄存器的初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0;
① 写出CPU执行的指令序列(用汇编指令写出)。
② 写出CPU执行每条指令后,CS、IP和相关寄存器中的数值。
③ 再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?

解: 初始值:CS=2000H,IP=0,DS=1000H,AX=0,BX=0
① ②
mov ax,6622H AX=6622H 其他寄存器保持不变,以下同理
jmp 0ff0:0100 CS=0ff0H,IP=0100H
mov ax,2000H AX=2000H
mov ds,ax DS=20000H
mov ax,[0008] AX=C389H
mov ax,[0002] AX=EA66H

③ 没有区别,被CS:IP指向的信息是程序;被传送、运算等指令操作的是数据
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-12-7 15:02:19 | 显示全部楼层
学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-29 19:19:27 | 显示全部楼层
支持!!!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-11-29 17:19:40 | 显示全部楼层
感谢3楼
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-10-14 00:23:28 | 显示全部楼层
谢了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-9-21 19:07:41 | 显示全部楼层
我还是不明白  小甲鱼 能讲讲吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-9-19 16:25:31 | 显示全部楼层
IP 0100
:0
-r ds
DS 1390
:1000
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1000  ES=1390  SS=1390  CS=2000  IP=0000   NV UP EI PL NZ NA PO NC
2000:0000 B82266        MOV     AX,6622
-t

AX=6622  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1000  ES=1390  SS=1390  CS=2000  IP=0003   NV UP EI PL NZ NA PO NC
2000:0003 EA0001F00F    JMP     0FF0:0100
-t

AX=6622  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=1000  ES=1390  SS=1390  CS=0FF0  IP=0100   NV UP EI PL NZ NA PO NC
0FF0:0100 16            PUSH    SS
-t

AX=6622  BX=0000  CX=0000  DX=0000  SP=FFEC  BP=0000  SI=0000  DI=0000
DS=1000  ES=1390  SS=1390  CS=0FF0  IP=0101   NV UP EI PL NZ NA PO NC
0FF0:0101 A4            MOVSB
我做的为什么和答案不一样呢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-9-18 23:32:20 | 显示全部楼层
检测点3.1
(2) 内存中的情况如图3.6所示
各寄存器的初始值:cs=2000h,ip=0,ds=1000h,ax=0,bx=0;
①   写出CPU执行的指令序列(用汇编指令写出)。
②   写出CPU执行每条指令后,CS、IP和相关寄存器的数值。
③   再次体会:数据和程序有区别吗?如何确定内存中的信息哪些是数据,哪些是程序?

图3.6内存情况示意

指令序列        CS        IP        DS        AX        BX
初始值        2000h        0        0        0        0
1        mov ax,6622h        2000h        3h        0        6622h        0
2        jmp 0ff0:0100        ff0h        100h        0        6622h        0
3        mov ax,2000h        ff0h        103h        0        2000h        0
4        mov ds,ax        ff0h        105h        2000h        2000h        0
5        mov ax,[8]        ff0h        108h        2000h        c389h        0
6        mov ax,[2]        ff0h        10bh        2000h        ea66h        0
我做的为什么不和这个一样呢 有没有详细的解释?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-9-18 23:30:49 | 显示全部楼层
有没有检测的3.1全部解释吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-20 03:12:45 | 显示全部楼层
内存,结果如下:  
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 ds,ax
这个就是段地址ds为 0001

所以mov ax,[0000] ,你可以理解为 0001:0000 或 0000:0010
因为这2种表达方式所算出的物理地址都是同一个 00010

0001:0000  :  0001 X 16 + 0000 = 00010
0000:0010 :   0000 X 16 + 0010 = 00010
学习了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-19 19:26:30 | 显示全部楼层

不对,为什么指令 mov bx,ax 这一条指令不要写上去
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-6-19 19:23:35 | 显示全部楼层
qkqpihumq 发表于 2014-9-17 10:28
检测点3.1
(1)  在DEBUG中,用 "D 0:0 lf" 查看内存,结果如下:
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 ...

感谢你
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-11-30 22:24:38 | 显示全部楼层
ca 你再看几遍书
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-11-26 20:08:40 | 显示全部楼层
学习学习
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-23 08:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表