实验一 汇编指令和机器代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验报告
一.实验目的
本实验共四个程序,均在debug下编写。程序一查看当前目录下的文件,程序二用ASCII码显示程序文件,程序三显示字符串,程序四键入任意字符串并显示出来。
二.实验内容
程序①
在命令行中打开debug程序,输入如下代码
-a100 #汇编命令A100表示汇编程序从100地址开始
0AE9:0100 mov dl,1 #将数值01h 装入DL 寄存器
0AE9:0102 mov ah,2 #将数值02h 装入AH 寄存器
0AE9:0104 int 21 #调用DOS 21号中断2号功能,用来逐个显示装入DL的字符0AE9:0106 int 20 #调用DOS 20号中断,终止程序,将控制权交回给DEBUG 0AE9:0108
-g
☺
Program terminated normally
-u100 106
0AE9:0100 B201 mov dl,01
0AE9:0102 B402 mov dl,02
0AE9:0104 CD21 int 21
0AE9:0106 CD20 int 20
-r #R命令来查看、改变寄存器内容
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=0AE9 ES=0AE9 SS=0AE9 CS=0AE9 IP=0100 NV UP EI PL NZ NA PO NC
0AE9:0100 B201 MOV DL,01
-n #debug程序长度
-rbx
BX 0000 #存放长度值高位部分
:
-rcx
CX 0000 #存放长度值低位部分
:8 #程序的字节数
-w #将该程序写入磁盘中
Writing 00008 bytes
-q #退出debug
D:\>dir
D:\>smile
☺
D:\>
运行程序
结果分析:程序打印出了asci码值为1的中的笑脸符号,查看了寄存器的值以及当前目录下的文件。
程序②
在命令行中打开debug程序,输入如下代码
-a100 #汇编命令
0AE9:0100 mov cx,0100 #定义循环次数为100H次, 即256次
0AE9:0103 mov dl,00 #dl寄存器中存入00值
0AE9:0105 mov ah,02 #ah寄存器中存入02值
0AE9:0107 int 21 #调用int21DOS功能函数
0AE9:0109 inc dl #dl寄存器的数值加1
0AE9:010B loop 0105 #每执行一次,cx减1,跳转到105地址,循环执行命令,直到
CX=0
0AE9:010D int 20 #程序结束, 调用中断
0AE9:010F
-g #显示ASCII码
运行程序
结果分析:程序循环打印出了从ASCII码0到255对应的字符.
程序③
在命令行中打开debug程序,输入如下代码
-a100 #汇编命令
0AE9:0100 mov dx,109 #dx寄存器存入将要打印的字符串的起始地址值
0AE9:0103 mov ah,9 #ah寄存器存入int21功能函数号
0AE9:0105 int 21 #调用DOS 21号中断2号功能,用来逐个显示装入DL的字符0AE9:0107 int 20 #调用DOS 20号中断,终止程序,将控制权交回给DEBUG 0AE9:0109 db 'understand?$' #使用db命令定义字符串
0AE9:0115
-r bx
BX 0000 #存放长度值高位部分
:
-r cx
CX 0000 #存放长度值低位部分
:15 #程序的字节数
-n
-w #将该程序写入磁盘中
Writing 00015 bytes
-g
understand?
Program terminated normally
-d100 #显示字符串
运行程序
结果分析:程序打印出起始地址为100单元的字符串
程序④
在命令行中打开debug程序,输入如下代码
-a100
0AE9:0100 mov dx,0116 #定义内存0116单元的值为字符缓冲区地址的最大的长度
0AE9:0103 mov ah,0a #ah寄存器存入int 21的功能函数0a
0AE9:0105 int 21 #输入缓冲区
0AE9:0107 mov dl,0a #dl寄存器存入0a值
0AE9:0109 mov ah,02 #ah存入功能函数02
0AE9:010B int 21 #调用int21功能函数
0AE9:010D mov dx,0118 #将字符串的起始地址0118存入寄存器dx
0AE9:0110 mov ah,09 #ah寄存器存入函数功能号
0AE9:0112 int 21 #调用DOS 21号中断2号功能,用来逐个显示装入DL的字符0AE9:0114 int 20 #调用DOS 20号中断,终止程序,将控制权交回给DEBUG 0AE9:0116 db 20 #0116单元存入字符串缓冲区的长度值,即定义缓冲区
0AE9:0117
-g
abcd$
abcd
Program terminated normally
-g
how are you?$