南昌大学实验报告
学生姓名: 赖思敏 学 号: 6100410171 专业班级: 电3 105 实验类型:■ 验证 □ 综合 □ 设计 □ 创新 实验日期: 2010.11.3 实验成绩:
实验3 汇编语言程序上机过程
一.实验目的
熟练掌握汇编语言程序的编辑、调试和运行的过程和方法。了解汇编语言程序的汇编、运行环境。
二.实验内容
1.掌握常用的编辑工具软件(如WORD、EDIT)、MASM和LINK的使用; 2.伪指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP; 3.利用的INT 21H的1号功能实现键盘输入的方法;
三.实验要求
1.仔细阅读有关伪指令SEGMENT,ENDS,ASSUME,END,OFFSET,DUP的内容; 2.了解利用的INT 21H的1号功能实现键盘输入的方法,了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法;
3.阅读下面程序段。
四.实验环境
PC微机
DOS操作系统或 Windows 操作系统
MASM。EXE,LINK。EXE,DEBUG。COM或宏汇编集成环境
五.实验步骤
1、按步骤完成下列程序的编译、连接、运行及调试等过程:
data segment message db 'This is a sample program of keyboard and disply'
db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'
data ends stack segment para stack 'stack'
db 50 dup(?)
stack ends code segment
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov mov mov int
again: mov
int cmp je cmp jc cmp ja and
nd: mov
mov int jmp
exit: mov
int
code ends
end 实验步骤:
ds,ax
dx,offset message ah,9 21h ah,1 21h al,1bh exit al,61h nd
al,7ah nd
al,11011111b dl,al ah,2 21h again ah,4ch 21h start
1.用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。
2.用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。
3.用TYPE命令显示1产生的.LST文件。
4.用LINK将.OBJ文件连接成可执行的.EXE文件。
5.在DOS状态下运行LINK产生的.EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。
6.将程序修改,使得用户键入除小写字母以外的其他字符(除ESC键),输出提示信息“Illegal character is striked,Please input again!” ,并要求重新输入。
修改后的程序如下: data segment message db 'This is a sample program of keyboard and disply'
db 0dh,0ah,'Please strike the key!',0dh,0ah,'If you want to exit,press the space key.',0dh,0ah,'$'
str1 db 0dh,0ah,'Illegal character is striked,Please input again!',0dh,0ah,'$' data ends
stack segment para stack 'stack' db 100 dup(?) stack ends code segment
assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax
mov dx,offset message mov ah,9 int 21h again: mov ah,1
int 21h
cmp al,20h jz exit cmp al,1bh je exit
cmp al,61h jc illegal cmp al,7ah ja illegal and al,11011111b mov dl,al
mov ah,2 int 21h jmp again illegal:mov dx,offset str1 mov ah,9 int 21h
jmp again exit: mov ah,4ch int 21h code ends end start
2.下面程序任务是完成求一个十以内数的立方,程序有错误,请进行纠正并调试运行。
DATA SEGMENT
TABLE DB 0,1,8,27,64,125,216,343,512,729 HEX DW 5 RESULT DW ? DATA ENDS CD SEGMENT
ASSUME CS:CODE, DS:DAT START: MOV AX, DATA MOV DS, AX
MOV BX, OFFSET TABLE MOV AX, HEX XLAT ADD BX, AX MOV AX, [BX] MOV RESULT, AX MOV AH, 4CH INT 21H CD ENDS
END START
实验步骤
1、 将该文件存成.asm文件,将其生成可执行文件。 2、 编译该程序,找出错误。并纠正。
3、 连接、运行看程序是否能得到正确结果。若不行,用Debug加载该可执行文件,单步调
试,观察各寄存器变化及RESLUlT单元的值。找出问题。
4、 重复汇编语言程序的上机过程,使程序能正确得到结果。
5、 补充此程序的输入和输出功能。使得程序能任意输入数据,立方值也能以十进制显示在
屏幕上。
修改后的程序如下: DATA SEGMENT
TABLE DW 0,1,8,27,64,125,216,343,512,729
INPUT DB 0DH,0AH,'Please input a number from 0 to 9:$'
STR1 DB 0DH,0AH,'If you want to break out,press the space key.$' RESULT DW ? DATA ENDS CODE SEGMENT
ASSUME CS:CODE, DS:DATA START: MOV AX, DATA MOV DS, AX
LEA DX,STR1 MOV AH,9 INT 21H BEGIN:
LEA DX,INPUT MOV AH, 9 INT 21H MOV AH,01H INT 21H CMP AL,20H JE EXIT CBW
SUB AX,30H MOV SI,AX ADD SI,SI
MOV AX,TABLE[SI] MOV BX,SP CAN1: MOV DX,0 MOV CX,10 DIV CX PUSH DX CMP AX,0 JA CAN1 MOV AH,02H MOV DL,0DH INT 21H MOV DL,0AH INT 21H CAN2:
POP AX ADD AX,30H MOV DL,AL MOV AH,02H INT 21H CMP SP,BX JA CAN2 MOV AH,02H MOV DL,0DH INT 21H MOV DL,0AH INT 21H JMP BEGIN EXIT: MOV AH, 4CH INT 21H
CODE ENDS
END START
六.实验报告要求
汇编,连接及调试时产生的错误,其原因及解决办法,各实验中的关键数据截图。
七.简答题
1.若在源程序中把INT 21H的'H'省去,会产生什么现象? 答:程序中的一些指令变成无效的,dos系统要求终止程序。 2.把 INT 21H 4CH号功能改为 INT 20H,行不行? 答:行。
3. 程序2中的相关寄存器如AX,BX在堆栈处理前后值有无发生变化?为什么? 答:AX有变化,BX没有变化,xlat指令是将表中的值经过处理后给al,bx中的值 仍是table的首地址。
八.实验小结
因篇幅问题不能全部显示,请点此查看更多更全内容