四川大学电气信息学院微机原理实验报告 下载本文

实验一 汇编语言编程基础

一.上机目的:

了解并逐步熟悉汇编语言的编辑方法及特点.

复习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