a489461197 发表于 2014-7-12 00:45:59

第五章 实验4.3

看到每个人的第二空都是18,但我做的事24,我觉得彼此都没错!废话不多说, 上代码

assume cs:code

code segment
start:                mov ax,code
                        mov ds,ax
                       
                        mov ax,0020h
                        mov es,ax
                        mov bx,0
                        mov cx,24    
                       
                s:        mov al,
                        mov es:,al
                        inc bx
                        loop s
                       
                        mov ax,4c00h
                        int 21h
                       
code ends

end start
                       

某鱼友的说法“cx后面填的都是数字,但是首先我们不知道程序要复制多长
所以我们可以用0来代替,先把程序编译,连接,运行后。
-r 后可以看出程序的总长度,因为cx是存放代码长度的,cx=23,哪章讲过忘记了。
程序复制的是从 mov ax,code 开始到 loop s结束,长度为cx中数据减去最后两个语句的长度,由-u 可以看出最后两个长度为5字节,所以cx=23h-5h=18h,dos默认为16位,等出结果”让我豁然开朗!
——————————————————————————————————————————————————————————————
循环次数设为0时,debug程序,我的cx是1D也就是29,按书上的答案18得到图1所示指令行 MOV cx,0012
但这样就减去了11个字节,mov ax,4c00h,int 21h只有5个字节,所以在我的电脑上应该填24,结果如图2.
指令行与答案一致,说明具体问题具体分析,实践才是硬道理,不能有以标准答案为准的学习风气!

语文是体育老师教的,不要见谅!

vkevke_3437 发表于 2014-7-15 09:17:49

别人第二空填的是十六进制的18H 你填的是十进制的24 十六进制的18H 等于十进制的24 这个没什么区别吧

abclin1995 发表于 2014-7-16 21:09:29

同楼上,不知道楼主在讲什么....
页: [1]
查看完整版本: 第五章 实验4.3