实验一 汇编语言编程基础
一.上机目的:
了解并逐步熟悉汇编语言的编辑方法及特点.
复习8088汇编语言的段结构、常用的指令与伪指令、存储空间的分配等。 掌握汇编语言的编辑、汇编及连接的过程。
了解并逐步掌握运用DEBUG进行调试汇编语言程序。
二.实验内容:
学习汇编语言程序的上机步骤1. 编辑EDIT.COM 2.用汇编程序MASM.Exe对源程序.ASM文件汇编,生成目标文件.OBJ 3.连接LINK.EXE 4.运行和调试DEBUG.exe
熟悉、使用DEBUG调试工具
运用8086汇编语言,编辑多字节非压缩型BCD数除法的简单程序,文件名取为*.ASM。 运用MASM﹒EXE文件进行汇编,修改程序中的各种语法错误,直至正确,形成*.OBJ文件。
运用LINK.EXE文件进行连接,形成*.EXE文件。
仔细阅读和体会DEBUG调试方法,掌握各种命令的使用方法。
运用DEBUG。EXE文件进行调试,使用单步执行命令—T两次,观察寄存器中内容的变化,使用察看存储器数据段命令—D,观察存储器数据段内数值。
再使用连续执行命令—G,执行程序,检查结果是否正确,若不正确可使用DEBUG的设置断点,单步执行等功能发现错误所在并加以改正。
三.正确的程序清单
data segment a db 9,6,8,7,5 b db 5
c db 5 dup (0) ;5之后有空格 n equ 5 data ends
code segment
assume cs:code,ds:data,es:data ;是逗号不是分号 最后不应有标点 start: mov ax,data ;start后面应该有冒号 mov ds,ax mov es,ax cld
lea si,a
lea di,c ;lea不是leb mov cx,n mov ah,0 lp1: lodsb aad div b stosb loop lp1
mov cx,n lea di,c
lp2: mov dl,[di]
add dl,30h ;加30对应正确的ASCII码 mov ah,2 int 21h
inc di ;地址应该递增而不是递减 loop lp2 mov ah,4ch int 21h
code ends ;没有冒号 end start
程序框图如下
实验结果如下
实验2.1 简单程序设计
一.实验目的
理解各种指令的功能。 进一步学习程序的调试。
二.实验内容
练习1. 实验题目:编程计算下列表达式:A=90,B=-70,C=5,Y均为有符号数, 计算Y=2×(A+B)+(A×C)÷5
原程序
DATA SEGMENT
A DB 90D,-70D,90D,5D B DB 2 C DB 5 D DB 10 DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV SI,OFFSET A
MOV BL,[SI] ;90D进BL INC SI
ADD BL,[SI] ;-70D加入BL XOR AX,AX ;AX清零 MOV AL,BL ;结果存入AL MUL B ;AL乘2
MOV BL,AL ;结果存到BL INC SI MOV AL,[SI] INC SI
MUL BYTE PTR[SI] ;90D乘5D DIV C ;AL除以5
ADD BL,AL ;两个结果相加,结果存BL MOV AL,BL ;转移到AL DIV D ;除以10
MOV CL,AH ;余数存CL DIV D ;再除以10
MOV DL,AL ;商转移到DL准备输出到屏幕 ADD DL,30H ;调整ACSII码 MOV BL,AH ;余数存到BL MOV AH,2 ;输出百位 INT 21H MOV DL,BL ADD DL,30H
MOV AH,2 ;输出十位
INT 21H
MOV DL,CL ADD DL,30H
MOV AH,2 ;输出个位 INT 21H CODE ENDS END START
输出计算结果130
练习3.编制程序,从键盘输入最多5个数,求他们的和,存入SUM。 data segment a db 5 dup (?) b db 10 data ends
code segment
assume cs:code,ds:data start: mov ax,data mov ds,ax mov cx,5 lea si,a
xor dl,dl
lop1: xor ax,ax
mov ah,01 ;从键盘输入数字 int 21h add dl,al
sub dl,30h ;ASCII码转换为实际数值 loop lop1 ;循环5次输入五个一位数 add dl,30h ;转换为ASCII码准备输出
cmp dl,3Ah ;比较和是否大于9 jae l1 ;大于进入l1 jmp l2 ;不大于进入l2 l1: mov al,dl xor ah,ah sub al,30h
div byte ptr b ;与练习一同理,除以10,商是十位,余数是个位 mov dl,al add dl,30h mov bl,ah mov ah,2 int 21h mov dl,bl add dl,30h
l2: mov ah,2 ;直接向屏幕输出结果 int 21h code ends
end start
输入11111输出连加计算结果5 输入23456输出连加计算结果20