微机接口原理实验3 联系客服

发布时间 : 星期一 文章微机接口原理实验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文件和它们之间的区别。