汇编语言(第三版)王爽著(实验四)[bx]和loop的使用
一、实验目的
掌握在Debug中使用命令进行汇编指令编程及执行
二、实验设备与环境
计算机
DOS操作系统或 Windows 操作系统
MASM.EXE, LINK.EXE, DEBUG.COM 或宏汇编集成环境
三、实验内容、程序清单及运行结果
1. 编程,向内存0:200-0:23f依次传送数据0-63(3fh),程序中只能使用9条指令,包括mov ax,4c00h和int 21h(1,2题一起)
assume cs:codes
codes segment
mov ax,0020h
mov ds,ax
mov cx,64
mov bx,0
s: mov ds:[bx],bl
inc bx
loop s
mov ax,4c00h
int 21h
codes ends
end
设置ds、cx
3.下面的程序的功能是将“mov ax,4c00h”之前的指令复制到内存0:200处,补全程序
assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,17h
s: mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
- 复制的是什么?从哪里到哪里?
答:复制的是代码段开始mov ax,cx到mov ax,4c00h之前的指令的机器码,从上图可以看出
- 复制的是什么?有多少个字节?你如何知道要复制的字节的数量?
答:17h=23个字节,先预估一个值,然后实验,通过反编译即可得到正确的机器码的字节数
四、实验结论、实验体会
第一题和第二题:
63小于255所以需要一个字节来存储,既可以用al来进行中转,ds的设置要考虑到偏移地址的增加和减少,以方便偏移地址的自增和自减
第三题:
因为code段是首先定义的所以cs:ip指向的程序首地址恰好是code段的首地址,所以可以把ds的值设置成和cs一样。17h的得出是通过先估算然后再使用多次得到的,
这次试验告诉我,要得到事实真相往往要通过一系列的实验事实来推理