实验一 DEBUG软件的使用
—、实验目的
1.学习DEBUG软件的基本使用方法。 2.掌握8088/8086的寻址方式。
3.掌握数据传送、算术运算逻辑运算等类指令的基本操作。 二、实验内容与步骤
本实验进行前必须保证系统盘上有DEBUG.EXE文件。在DOS环境下执行DEBUG命令就在屏幕上显示DEBUG提示符:“-”(短划线)。
D:\LLW>DEBUG↘ ;以下在字符下加下划线表示键入的内容,↘代表回车
1.装载文件——(N、L命令)
-N EXSE2_3.EXE ↘ ;程序命名为EXSE2_3.EXE -L↘
2.反汇编命令(U命令) -U ↘
3.显示当前环境和寄存器内容(R命令) -R↘
4.以十六进制和ASCII码形式显示内存单元内容(D命令)
-D↘
5.修改寄存器内容
-R cx↘ ;修改完后检查是否已修改
6.输入数据(可以是指令的机器码或操作数)——即修改内存内容(E命令) -E 段地址:偏移地址↘ ;修改完后检查是否已修改 7.程序输入——汇编命令(A命令) 输入程序应注意以下几点:
(1)输入的数字必须是十六进制数,并且不输入H。 (2)分号后面的内容(注释)不要输入。
(3)不输入标号,条件转移指令中的标号用偏移地址代替。
-A↘;以下用↘代表回车键,下面加下划线部分代表要键入的内容。(可以是任意程序)。 重新回到DEBUG提示符“-”状态,表示汇编命令已结束。 8.执行机器指令程序到指定断点——(G命令)
-G=段地址:偏移地址(起始) 段地址:偏移地址(指定断点) 9.程序调试练习
修改并调试以下程序,使之完成30000H开始的内存单元中存入31个先自然递增然后又自然递减的数据(00H~0FH~00H)的功能。程序从CS:0100H开始存放。调试完成后程序命名为PCS1.EXE并存盘。
程序如下: ;PCS1
MOV AX,3000H MOV DS,AX MOV SI,0 MOV CL,0FH XOR AX,AX L1:MOV [SI],AL
1
INC AL DEC CL JNZ L1
MOV CX,10H L2:MOV [SI],AL INC SI DEC AL LOOP L2 INT 20H 步骤:
(1)用A命令输入程序;
(2)用反汇编U命令显示程序及目标码: (3)存盘程序命名为PCSl.EXE;
(4)用断点执行G命令执行程序到INT 20H指令(不执行INT 20H指令); (5)用D命令检查程序执行后31个数是否已写入存储器3000H:0H中。 -R↘ -D↘
显示如下:????
(6)修改程序、调试直到显示结果正确。
三、思考题
1.EXE文件程序的第一条可执行指令的IP等于多少?
2.在DEBUG环境下显示的程序和数字是什么形式?标号又是什么形式? 四、实验报告
1.打印PCSl.EXE的反汇编文件,并在每条指令后加上注释。 2.回答思考题。
3.打印本次实验中所有DEBUG命令及运行界面。 4.试述本次实验中你学会的DEBUG命令。
2
实验二 汇编语言程序的建立和运行
—、实验目的
1.熟悉伪指令和汇编运算符,掌握汇编语言程序的编写方法。
2.学习汇编语言源程序的编辑、汇编、连接、调试及运行的全过程。 二、实验内容及步骤 ·
要建立和运行汇编语言程序,系统盘上应该具有如下文件:
.EDIT.COM(或其他全屏幕编辑软件如WS.COM、EDLIN.COM等) 编辑程序 .MASM.EXE 宏汇编程序 .LINK.EXE 链接程序 .DEBUG.EXE 调试程序 1.程序编辑。用EDIT或者其他编辑软件编辑书中149页程序源程序并存盘。 2.程序汇编
如果被汇编的程序没有语法错误,则屏幕上还给出如下信息: 0 Warning Errors 0 Severe Errors
汇编过程中如果发现有错误,程序员必须重新用编辑软件修改错误后再进行汇编,直至汇编正确通过。需要强调的是汇编过程只能指出源程序中的语法错误,而不能指出算法和逻辑等错误。 3.程序链接
汇编过程由源程序产生了二进制的目标文件(OBJ文件),但目标文件用的是浮动地址,它不能直接上机执行,必须用链接程序(LINK.EXE)将OBJ文件转换成可执行的EXE文件。
4.程序调试与运行
有了EXE文件后就可以运行程序了。此时只要打入文件名(不输入扩展名),回车即可。
有的程序中没有将结果显示在CRT屏幕上,因此不能知道程序运行结果,这时必须在DEBUG状态下查看寄存器或内存单元。 三、思考题
1.用DEBUG软件调试程序(.EXE文件形式),不执行任何指令,可以用D命令(-DDS: 0)查看数据段的原始数据吗?为什么?
2.汇编语言源程序通过了汇编和链接是否就正确无误了?为什么?
3.汇编语言源程序经汇编和链接后产生的是哪一种可执行文件?这种文件中IP的初始值一般是多少?
四、实验报告
1.填写EXSE3_1.ASM程序中分号后的空白,贴在习题本上。 2.打印调试通过后的程序清单。 3.回答思考题。
4.以本程序为例说明汇编语言程序的建立和运行的主要步骤。
3
实验三 代码转换实验
一、实验目的
1.掌握计算机常用代码的软件转换技术。 2.进一步熟悉DEBUG软件的使用。 3.掌握简单循环程序的编程方法。 二、实验内容
代码转换是计算机和I/O设备进行信息交换的重要技术之一。各种I/O设备所提供和接收的数据编码不尽相同,如图2-1所示。为了处理这些信息,计算机必须将各种不同编码形式的信息转换成别种适当的数据形式。例如,键盘输入的数据均为ASCII码形式存储在内存中,通常要求将其转换成相应的数据格式。一般实现代码转换有两种方法:
1.软件法 利用CPU的算术逻辑运算功能,通过运算或查表实现各种数据代码间的转换。该方法经济但速度慢。
2.硬件法 利用专用代码转换集成电路进行转换。如74LS47可把BCD码转换为七段代码。这种方法需要硬件费用,但速度快。 本实验要求掌握软件编码转换技术。
计算机常用的代码有二进制、八进制、十六进制、BCD码、ASCII码、七段码等。 (一)ASCII码转换为未组合BCD码
设从键盘输入十进制数的ASCII码已存放在起始地址为CS:0150H的单元中,把它转换成未组合BCD码后,再分别存入起始地址为CS:015AH的单元中。若输入的不是十进制数的ASCII码,则相应存放结果单元的内容为“FF”。 提示:
1.未组合BCD码是一位十进制数字占一个字节,高半字节为0,低半字节为该十进制数字的BCD码。ASCII码转换为未组合BCD码只需减30H。
2.程序框图如图所示。
3.程序执行前,需要在CS:0150H内存缓冲区写入待转换的ASCII码。方法如下; 方法一:用A命令
-A CS:0150 ↘
CS:0150 DB 35,39,30,41,32↘
4
方法二:用E命令 -E CS:0150
CS:0150 35,39,30,41,32 ↘ 4.执行程序后检查执行结果可用D命令:
-D CS:015A ↘
CS:015A 05,09,00,FF,02
5.参考程序:
;PCS3-1
ORG 0100H
MOV CX,0005H MOV DI,150H BB: MOV BL,0FFH MOV AL,[DI] CMP AL,3AH JNB DONE SUB AL,30H JB DONE
MOV BL,AL DONE:MOV AL,BL
MOV [DI+0AH],AL
INC DI LOOP BB MOV AH,4CH
INT 21H ’
ORG 0150H
DB 35H,39H,30H,41H,32H
(二)BCD码转换为二进制码
在各种智能仪器和信息处理中,人们总习惯于用十进制数来表示信息。但是绝大多数计算机没有十进制运算指令(仅有十进制调整指令)。所以常规的方法是将输入的十进制数转换为二进制数后,再进行各种数据处理。
BCD码分为组合BCD码和未组合BCD码。组合BCD码每字节存放两位BCD数,未组合BCD码每字节只存放一位BCD数,高半字节为0。组合BCD码加、减后必须用DAA和DAS指令进行调整(乘法或除法没有调整指令)。未组合BCD码则可进行加、减、乘、除四则运算,其调整指令分别为AAA,AAS,AAM和AAD。
本实验是要把两位未组合BCD码数转换成二进制数。
设未组合BCD码以存放在起始地址为CS:0150H的区域,把它们转换为二进制数后,再分别存入起始地址为CS:0165H的区域。例如 ORG 0150H
DB 03H,06H,08H,09H,06H,05H,02H,09H 则转换后CS:0165H开始的单元的内容为:
CS:0165H 24H,00H,59H,00H,41H,00H,1DH,00H 提示:
1.算法是 “十位×10 +个位”。其中的10可以用“10=8+2”来实现。
5