|
主题 : : 实验四(3题)求新的解法 [已解决] |
回复[ 7次 ]
点击[ 1228次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2007-11-26 21:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
第三题,填空
assume cs:code
code segment
mov ax,cs ;ax,填空
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,17h ;cx,填空
s:
mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
由于要将当前代码复制到0:200处,所以要得到当前代码载入后的地址,由于程序载入的地址于系统环境有关,是一个不定值,则第一个空肯定填写cs,cs即代码段载入内存的段地址,第一条指令的偏移为0。
测试时候讲cx设置为零,debug加载(下图)
由图可知:CX=001C --0B49:001C CC INT 3即int 21的下一条指令.
根据题意,赋值mov ax,4c00h前的代码,
0B49:0017 B8004C MOV AX,4C00
也就是说赋值0B49:000~0B49:0016的代码,即cx=17h
试验结果:
-u
0B49:0000 8CC8 MOV AX,CS
0B49:0002 8ED8 MOV DS,AX
0B49:0004 B82000 MOV AX,0020
0B49:0007 8EC0 MOV ES,AX
0B49:0009 BB0000 MOV BX,0000
0B49:000C B91900 MOV CX,0000
0B49:000F 8A07 MOV AL,[BX]
0B49:0011 26 ES:
0B49:0012 8807 MOV [BX],AL
0B49:0014 43 INC BX
0B49:0015 E2F8 LOOP 000F
0B49:0017 B8004C MOV AX,4C00
0B49:001A CD21 INT 21
0B49:001C CC INT 3
0B49:001D 50 PUSH AX
0B49:001E E8B760 CALL 60D8
-r
AX=0000 BX=0000 CX=001C DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B39 ES=0B39 SS=0B49 CS=0B49 IP=0000 NV UP EI PL NZ NA PO NC
0B49:0000 8CC8 MOV AX,CS | | |
|
|
|
|
[第1楼]
[ 回复时间:2007-11-26 21:03 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
这是我打消掉数每条指令的长度求和后的最新方法,不知道还有没有新的解法?? | | |
|
|
|
|
[第2楼]
[ 回复时间:2007-11-27 08:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:6
信誉值:0
注册日期:2007-11-17 09:50 |
我的做法:
第一个空处填写code,使用符号地址来表示CS的段地址。
第二个空处先随便填写一个数字,用DEBUG调入,CX的值1DH即为代码段的长度,减去mov ax,4c00h int 21h这两个指令共5个指节的长度,得到18H,即为要复制的字节的数量 | | |
|
|
|
|
[第3楼]
[ 回复时间:2007-11-27 15:18 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
谢谢楼上,原来第一个空还可以填写code,我光想cs,ds了~
第二个空和我的方法差不多。再次谢谢楼上。
还有别的方法和答案吗? | | |
|
|
|
|
[第4楼]
[ 回复时间:2007-11-28 23:58 ]
[引用]
[回复]
[ top ] | |
荣誉值:7
信誉值:10
注册日期:2007-11-26 03:32 |
可是做到这时code可以用做指令还没学
我支持mouse的解法
我开始做时,cs那个空是想到了,第2问想不出来,但我知道用debug后肯定能算出长度,当时觉得既然是题目,就不能玩阴招,就没用debug,后来实在不行一看答案,靠 | | |
|
|
|
|
[第5楼]
[ 回复时间:2007-12-12 12:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
|
|
|
|
|
[第6楼]
[ 回复时间:2007-12-12 15:57 ]
[引用]
[回复]
[ top ] | |
荣誉值:3
信誉值:1
注册日期:2007-12-02 21:14 |
code在这做为标号,在第四章第二节中讲到了,应该是学了,但这里code被编译器编译为段地址,在 loop s 中 s 被编译我编译为偏移地址。 | | |
|
|
|
|
[第7楼]
[ 回复时间:2008-03-28 09:29 ]
[引用]
[回复]
[ top ] | |
荣誉值:472
信誉值:12
注册日期:2007-10-16 15:34 |
此贴由 贴主 于 [ 2008-03-28 09:29 ] 结贴。 结贴原因:问题已解决 | | |