发布时间 : 星期一 文章微机接口原理实验3更新完毕开始阅读e45b75c905087632311212f6
实验3 汇编语言程序上机过程
1. 汇编,连接及调试时产生的错误,其原因及解决办法。
DATA SEGMENT ; 数据段定义伪指令
(段名 segment [定位类型][组合类型][‘类
别’]
????
段名 ends
MESSAGE DB 'THIS IS A SAMPLE PROGRAM OF KEYBOARD AND DISPLAY' DB 0DH,0AH,'PLEASE STRIKE THE KEY!',0DH,0AH,'$' DATA ENDS STACK SEGMENT DB 50 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA
MOV DS,AX DS
MOV DX,OFFSET MESSAGE MOV AH,9
INT 21H AGAIN: MOV AH,1
INT 21H CMP AL,1BH JE EXIT CMP AL,61H JC ND CMP AL,7AH JA ND AND AL,11011111B ND: MOV DL,AL MOV AH,2
INT 21H JMP AGAIN EXIT: MOV AH,4CH
INT 21H CODE ENDS 源程序的每个逻辑段由segment开始,到ends结束)
;数据定义伪指令
; 定义要显示的字符串,'$'为插入串结束符 ;数据段结束 ;堆栈段定义伪指令 ; 重复操作符 ;堆栈段结束
;代码段定义伪指令
;设定段寄存器伪指令 ;将数据段的新生儿湿疹段地址送入DS,即初始化; 取偏移地址送入DX ;DOS功能的9号功能,在显示器上显示字符串 ;DOS功能的1功能,在键盘输入的内容同时也显示在
显示器上 ;比较键入的是否是“ESC”
;键入字符是“ESC”则转至EXIT语句处 ;比较键入的字符与小写字母“a”的ASCⅡ码大小 ;键入字符小于“a”则转至ND处
;比较键入的字符与小写字母“z“的ASCⅡ码大小 ;输入字符大于“z”则转至ND处 ;使小写字母变成大写字母
;DOS功能的2功能,在显示器上显示字符 ;无条件转移到AGAIN语句 ;返回DOS ;代码段结束
END START
汇编调试时出现如下错误:
(5) zero prefix must be added to a HEX value, for example: 0Ch
数字”0”和大写英文字母”O”相似,但16进制最大只有F,所以编译系统不知道”O”是什么,所以出错。
(9) cannot evaluate this expression: 50DUP(?) 50和DUP之间应该有空格。
(17) wrong parameters: MOV DX,OFFEST MESSAGE
(17) probably no zero prefix for hex; or no 'h' suffix; or wrong addressing; or undefined var: OFFEST MESSAGE
OFFSET是伪指令,而OFFEST是未定义字符,输入出错造成。 2.思考
①若在源程序中把INT 21H的'H'省去,会产生什么现象?
每运行到 INT 21指令时,都会出现上述中断提示。因为程序并不知道 INT 21是什么,所以不支持这条指令执行,编译无法通过。若INT 1,或INT 1H,效果相同。因为0-9的十进制与十六进制相同。
②把INT 21H 4CH号功能改为INT 20H,新生儿湿疹行不行?
不行。当键入一般字符时与之前的显示无差异,但当键入“ESC”时,程序被中断。因为INT 20H有被DOS所定义,所以被中断。而本程序的中断是要跳回DOS,即程序不能把INT 21H 4CH改成INT 20H。
⑶写出自编的程序,并注释。
DATA SEGMENT
MESSAGE DB 'THIS IS A SAMPLE PROGRAM OF KEYBOARD AND DISPLAY'
DB 0DH,0AH,'PLEASE STRIKE THE KEY!',0DH,0AH,'$' MESSAGE1 DB 'TEST', '$' ;定义MESSAGE1语句要显示字符串,'$'为插入串结束符
DATA ENDS STACK SEGMENT
DB 50 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,1BH JE EXIT
CMP AL,54H ;比较键入的是否是“T“
JE NB ;键入字符是“T” 则转至NB语句处 CMP AL,61H JC ND
CMP AL,7AH JA ND
AND AL,11011111B ND: MOV DL,AL MOV AH,2 INT 21H
JMP AGAIN
NB: MOV DX,OFFSET MESSAGE1 ;取MESSAGE1偏移地址送入DX
MOV AH,9
INT 21H ;DOS功能的9号功能,在显示器上显示字符串
JMP AGAIN EXIT: MOV AH,4CH INT 21H CODE ENDS
END START
4.实验体会和建议
通过汇编语言程序上机过程的实验,基本掌握了EDIT,MASM和LINK的使用。另外,对伪指令如SEGMENT,ENDS,ASSUME,END,OFFSET,DUP等有了更深一步的了解。同时,学会利用INT 21H的1号,2号,9号功能实现键盘输入的方法及其含义。也了解.EXE文件和.COM文件和它们之间的区别。