简单程序设计
实验目的:
1.掌握8086汇编语言程序设计过程
2.掌握8086程序调试方法
实验任务与要求:
任务一(占总分30%):
1.编辑
利用编辑器(记事本,也可采用其它编辑器)建立一个名为ASM1.ASM的文本文件,内容如下:
ASSUME DS:seg1,CS:seg2
seg1 SEGMENT
TABLE DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
BUF DB 10 DUP(0)
NUMBER DB 7
ASCII DB 0
X DW 1000H
Y DW 0FFFFH
Z DW 0,0
seg1 ENDS
seg2 SEGMENT
start: MOV AX,seg1
MOV DS,AX
MOV ES,AX
;(1)查表
LEA BX,TABLE
MOV AL,NUMBER
XLAT
MOV ASCII, AL
;(2)字串传送
MOV CX,10
LEA SI,TABLE
LEA DI,BUF
CLD
REP MOVSB
;(3)计算(X+Y),结果存Z单元
MOV DX,0
MOV AX,X
ADD AX,Y
ADC DX,0
MOV Z,AX
MOV Z+2,DX
;(4)添加代码,完成任务二1,2
;改写程序,将TABLE单元的10个字节数据传送到TABLE+5开始的单元
MOV CX,10
LEA SI,[TABLE + 9]
LEA DI,[TABLE + 14]
STD
REP MOVSB
;添加代码,完成(X+Y)/X,商存Z单元,余数存Z+2单元
MOV DX,0
MOV AX,X
ADD AX,Y
ADC DX,0
DIV X
MOV Z,AX
MOV Z+2,DX
seg2 ENDS
END start
2.汇编
利用汇编器(MASM.EXE)将ASM1.ASM汇编为目标文件(默认文件名为ASM1.OBJ)。
如果有错误返回步骤1。
3.链接
利用链接器(LINK.EXE)将ASM1.OBJ链接为可执行文件(默认文件名为ASM1.EXE)。
如果有错误返回步骤1。
4.调试
(1)启动调试器(DEBUG.EXE)。
利用DEBUG命令将ASM1.EXE载入内存。
利用DEBUG命令观察记录数据TABLE、NUMBER、ASCII、X、Y在内存中的形式。
(2)运行程序,记录Y与ASCII单元内容。
(3)通过步骤2和步骤3后,利用DEBUG命令分别连续、单步、带断点运行程序。
任务二(占总分20%):
1.改写程序,将TABLE单元的10个字节数据传送到TABLE+5开始的单元。如何实现?
2.添加代码,完成(X+Y)/X,商存Z单元,余数存Z+2单元;运行程序,记录商与余数。
预习(预习报告占总分20%):
列出主要DEBUG命令,并写在报告纸上。
按任务二1、2中的要求改写程序,并写在报告纸上。
实验报告要求(实验报告占总分30%):
记录任务一中实验步骤中要求的操作及其结果,可用屏幕拷贝记录,打印后贴在报告中。
根据任务二中的要求,写出源程序中的改写部分,并给出运行结果,可用屏幕拷贝记录,打印后贴在报告中。
回答以下问题:
(1) 在步骤4中怎样才能观察到内存数据?
(2) 计算机中的数据形式是怎样的,DEBUG以什么形式表示内存数据?
(3) 如何处理X+Y产生的进位?进位存在哪里了?
(4) 字串传送时,若两个字串单元存在重叠,如何编程处理?
重要提示:必须完成预习任务,方可进入实验室完成实验。
代码:
代码一:ASM1.txt
ASSUME DS:seg1,CS:seg2
seg1 SEGMENT
TABLE DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
BUF DB 10 DUP(0)
NUMBER DB 7
ASCII DB 0
X DW 1000H
Y DW 0FFFFH
Z DW 0,0
seg1 ENDS
seg2 SEGMENT
start: MOV AX,seg1
MOV DS,AX
MOV ES,AX
;(1)查表
LEA BX,TABLE
MOV AL,NUMBER
XLAT
MOV ASCII, AL
;(2)字串传送
MOV CX,10
LEA SI,TABLE
LEA DI,BUF
CLD
REP MOVSB
;(3)计算(X+Y),结果存Z单元
MOV DX,0
MOV AX,X
ADD AX,Y
ADC DX,0
MOV Z,AX
MOV Z+2,DX
seg2 ENDS
END start
代码二:ASM2.txt
ASSUME DS:seg1,CS:seg2
seg1 SEGMENT
TABLE DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H
BUF DB 10 DUP(0)
NUMBER DB 7
ASCII DB 0
X DW 1000H
Y DW 0FFFFH
Z DW 0,0
seg1 ENDS
seg2 SEGMENT
start: MOV AX,seg1
MOV DS,AX
MOV ES,AX
;(1)查表
LEA BX,TABLE
MOV AL,NUMBER
XLAT
MOV ASCII, AL
;改写程序,将TABLE单元的10个字节数据传送到TABLE+5开始的单元
MOV CX,10
LEA SI,[TABLE + 9]
LEA DI,[TABLE + 14]
STD
REP MOVSB
;添加代码,完成(X+Y)/X,商存Z单元,余数存Z+2单元
MOV DX,0
MOV AX,X
ADD AX,Y
ADC DX,0
DIV X
MOV Z,AX
MOV Z+2,DX
seg2 ENDS
END start