实验4.3
(3) 下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序。上机调试,跟踪运行结果。assume cs:code
code segment
mov ax,code;code为所填写的数据
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,18h ;18h为所填写的数据
s: mov al,
mov es:,al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
问题:老实说 我到现在都没有看明白 题目是什么意思?所以更不明白答案?:'(:'(:'(:'( 实验4 和loop的使用
(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,
mov es:,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的长度)
此题的目的是:
1、理解CS和CODE的关联
2、理解CS保存程序的代码段,即“复制的是什么,从哪里到哪里”
3、理解CX在载入程序后保存程序的长度。
4、理解数据和代码对CPU来说是没区别的,只要CS:IP指向的就是代码
C:\DOCUME~1\ADMINI~1>debug sy4-3.exe
-u
0C79:0000 B8790C MOV AX,0C79
0C79:0003 8ED8 MOV DS,AX
0C79:0005 B82000 MOV AX,0020
0C79:0008 8EC0 MOV ES,AX
0C79:000A BB0000 MOV BX,0000
0C79:000D B91800 MOV CX,0018
0C79:0010 8A07 MOV AL,
0C79:0012 26 ES:
0C79:0013 8807 MOV ,AL
0C79:0015 43 INC BX
0C79:0016 E2F8 LOOP 0010
0C79:0018 B8004C MOV AX,4C00
0C79:001B CD21 INT 21
0C79:001D 50 PUSH AX
0C79:001E 8D4680 LEA AX,
-g
Program terminated normally
-d 0:200
0000:0200B8 79 0C 8E D8 B8 20 00-8E C0 BB 00 00 B9 18 00 .y.... .........
0000:02108A 07 26 88 07 43 E2 F8-00 00 00 00 00 00 00 00 ..&..C..........
0000:022000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:023000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:024000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:025000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:026000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
0000:027000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
-u 0:200
0000:0200 B8790C MOV AX,0C79
0000:0203 8ED8 MOV DS,AX
0000:0205 B82000 MOV AX,0020
0000:0208 8EC0 MOV ES,AX
0000:020A BB0000 MOV BX,0000
0000:020D B91800 MOV CX,0018
0000:0210 8A07 MOV AL,
0000:0212 26 ES:
0000:0213 8807 MOV ,AL
0000:0215 43 INC BX
0000:0216 E2F8 LOOP 0210
0000:0218 0000 ADD ,AL
0000:021A 0000 ADD ,AL
0000:021C 0000 ADD ,AL
0000:021E 0000 ADD ,AL
-q
你题目里所说的
mov cx,18h ;18h为所填写的数据
这个18其实就是前面所有指令所占的字节数,至于为什么是18h,其实得先把汇编指令转换为机器码,然后就知道它们有多大了,这个过程可以先用debug调试一遍就知道了,呵呵
页:
[1]