遒羽 发表于 2013-1-27 10:07:09

请教一个汇编程序代码长度的计算

本帖最后由 遒羽 于 2013-1-27 10:13 编辑

下面的程序功能是将“mov ax,4c00h"之前的指令复制到内存0:200处,补全程序
问题1:“mov用在寄存器之间传送数据的指令是2个字节,用在寄存器和立即数之间是3个字节”怎么理解?
问题2:CX在载入程序后保存程序的长度17或者18怎么算出来的。
谢谢!

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,   
   mov es:,al   
   inc bx   
   loop s   
   mov ax,4c00h   
   int 21h   
code ends   
end

NGtailang 发表于 2013-1-27 19:01:44

本帖最后由 NGtailang 于 2013-1-27 19:13 编辑

你少了程序入口,提示,debug 在加载可执行文件如内存后, CX中存放的是程序的长度(书本p91)。

遒羽 发表于 2013-1-27 21:03:24

NGtailang 发表于 2013-1-27 19:01 static/image/common/back.gif
你少了程序入口,提示,debug 在加载可执行文件如内存后, CX中存放的是程序的长度(书本p91)。

程序入口可以不需要,是吗?还有我的问题是本题程序程度为何是17.

真在雪会变 发表于 2013-1-29 09:19:48

继续坐等答案。。

dr-pan 发表于 2013-1-29 10:14:42

shansongh 发表于 2013-1-29 22:46:05

第一空填cs
第二空随便填一个数字,
编译后,debug下
用r看寄存器的状态,
用u翻译代码。
直接算开始代码到mov ax,4c00h代码前的值就行了

遒羽 发表于 2013-1-29 22:50:16

shansongh 发表于 2013-1-29 22:46 static/image/common/back.gif
第一空填cs
第二空随便填一个数字,
编译后,debug下


如果不用debug可以直接算出cs为17h或者18h吗?还有17H和18h有什么区别??谢谢!!

shansongh 发表于 2013-1-29 22:50:16

第一空填cs
第二空随便填一个数字,
编译后,debug下
用r看寄存器的状态,
用u翻译代码。
直接算开始代码到mov ax,4c00h代码前的值就行了
再改回来就行

shansongh 发表于 2013-1-29 22:58:00

RE: 请教一个汇编程序代码长度的计算

遒羽 发表于 2013-1-29 22:50 static/image/common/back.gif
如果不用debug可以直接算出cs为17h或者18h吗?还有17H和18h有什么区别??谢谢!!

我暂时知道这些,应该还是有其他办法的
而且可以通过算出后面两个汇编指令的大小,通过cx获得相应的值
17h 18h的差距应该在于后面偏移地址17对应足够的信息了,但是18对应的字型数据的高位为零,所以可用
页: [1]
查看完整版本: 请教一个汇编程序代码长度的计算