请教一个汇编程序代码长度的计算
本帖最后由 遒羽 于 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:13 编辑
你少了程序入口,提示,debug 在加载可执行文件如内存后, CX中存放的是程序的长度(书本p91)。 NGtailang 发表于 2013-1-27 19:01 static/image/common/back.gif
你少了程序入口,提示,debug 在加载可执行文件如内存后, CX中存放的是程序的长度(书本p91)。
程序入口可以不需要,是吗?还有我的问题是本题程序程度为何是17. 继续坐等答案。。 第一空填cs
第二空随便填一个数字,
编译后,debug下
用r看寄存器的状态,
用u翻译代码。
直接算开始代码到mov ax,4c00h代码前的值就行了 shansongh 发表于 2013-1-29 22:46 static/image/common/back.gif
第一空填cs
第二空随便填一个数字,
编译后,debug下
如果不用debug可以直接算出cs为17h或者18h吗?还有17H和18h有什么区别??谢谢!! 第一空填cs
第二空随便填一个数字,
编译后,debug下
用r看寄存器的状态,
用u翻译代码。
直接算开始代码到mov ax,4c00h代码前的值就行了
再改回来就行
RE: 请教一个汇编程序代码长度的计算
遒羽 发表于 2013-1-29 22:50 static/image/common/back.gif如果不用debug可以直接算出cs为17h或者18h吗?还有17H和18h有什么区别??谢谢!!
我暂时知道这些,应该还是有其他办法的
而且可以通过算出后面两个汇编指令的大小,通过cx获得相应的值
17h 18h的差距应该在于后面偏移地址17对应足够的信息了,但是18对应的字型数据的高位为零,所以可用
页:
[1]