鱼C论坛

 找回密码
 立即注册
查看: 2653|回复: 2

王爽汇编4.9实验(3)的2个问题

[复制链接]
发表于 2018-12-20 22:05:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
实验(3)里要求填两个空,一个是代码起始地址,另一个是代码长度问题。其中,第一个问题答案里中说把cs赋给ds,这我完全可以理解,因为debug加载这个程序之后会把cs自动指向程序的第一条指令,但是另外一个备选答案即code,如果它是指cs中的代码值,那在加载这个程序之前我怎么知道它被加载之后第一行命令储存在哪个内存单元从而无法知道cs的值啊。第二个问题中那两个长度的具体值怎么来的,自己把每行指令的长度加起来人为设置的吗?


附上原题和答案:

(3)下面的程序功能是将“mov ax,4c00h"之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。

assume cs:code   

code segment   

    mov ax, code ;或mov ax, cs  

     mov ds,ax   

     mov ax,0020h   

     mov es,ax   

     mov bx,0   

     mov cx, 18h   ;或mov cx, 17h    ;或sub cx,5

  s: mov al,[bx]   

     mov es:[bx],al   

     inc bx   

     loop s   

     mov ax,4c00h   

     int 21h   

code ends   

end



此题有多个答案,因为mov用在寄存器之间传送数据的指令是2个字节,用在寄存器和立即数之间是3个字节

答案1:mov ax,cs  (占2个字节)  

     mov cx,17

答案2:mov ax,code (占3个字节)

     mov cx,18

答案3:mov ax,cs 或mov ax,code

     把mov cx,   改成 sub cx,5

(因为在载入程序时,cx保存程序的长度,减去5是为减去mov ax,4c00h和int 21h的长度)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-24 20:13:24 | 显示全部楼层
哈哈,我已经明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-25 21:49:55 | 显示全部楼层
麻烦管理员删除这个帖子,我已经明白了@小甲鱼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-27 04:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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