当前位置:文档之家› 微机原理实验3

微机原理实验3

微机原理实验3
微机原理实验3

实验三:INT21功能的使用

一. 实验目的

1. 了解INT 21H 各功能块的功能和使用方法

2. 掌握字符方式下PC机显示器显示控制

二. 实验设备

PC机一台

三. 实验内容及步骤

本实验在显示器上显示A~Z 26个英文字母。显示器I/O功能调用使用说明如下:INT 21H使用说明

(1)入口:AH=01H

功能:键盘输入字符,AL=输入字符

(2)入口:AH=02H,DL=数据(ASCII码)

功能:写DL中的数据到屏幕上

(3)入口:AH=09H,DS:DX=字串首址,且字符串尾用$ 填充

功能:显示一字串,直到遇到$ 为止。

四. 编程练习

A).利用INT 21H功能,在PC机上显示:“MY NAME IS ……………”.

B).编程计算Z=5678H+6666H-1234H,并把结果显示在屏幕上。

C).编程计算Z=5678H+0666H÷14H,并把结果显示在屏幕上.

D).编程计算Z=5678H+0321H×02H,并把结果显示在屏幕上。

E).编程计算Z=5678H-6666H+8888H,并把结果显示在屏幕上。

F).编程计算Z=5678H+0666H-ABCDH,并把结果显示在屏幕上。

G).编程计算Z=0678H÷06H×14H,并把结果显示在屏幕上。

五.软件流程图和程序清单

A);利用INT 21H功能,在PC机上显示:“MY NAME IS ……………”

DATAS SEGMENT

STRING DB 'MY NAME IS ZHANGSHAOJUN!','$'

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START:

MOV AX,DATAS

MOV DS,AX

LEA DX,STRING ;获取要显示字符串首地址

MOV AH,09H ;显示字符

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

END START

【运行结果】

B);编程计算 Z=5678H+6666H-1234H,并把结果显示在屏幕上。

查表法:

DATAS SEGMENT

ORG 0300H

TAB DB "0","1","2","3","4","5","6","7","8",

"9","A","B","C","D","E","F"

NUM DW 5678H,6666H,1234H

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START:

MOV AX,DATAS

MOV DS,AX

LEA SI,NUM

MOV AX,[SI]

ADC AX,[SI+2]

SUB AX,[SI+4]

MOV CX,04H ;将AX中的十六进制数显示在屏幕上

BBB:MOV BX,0010H

MOV DX,0

DIV BX ;依次求出AX中数的低位到高位,于DX中

PUSH AX

MOV DI,DX

MOV BYTE PTR DL,0300H[DI] ;查表找出对于ASCII码值,存入DL中,显示 MOV AH,02H

INT 21H

POP AX

LOOP BBB

MOV DL,'H' ;显示?H?

MOV AH,02H

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

END START

【运行结果】

求值法:

CODES SEGMENT

ASSUME CS:CODES

START:

MOV AX,5678H+6666H-1234H

MOV CX,4

ROL AX,CL

CCC:PUSH AX

AND AX,000FH

CMP AX,09H

JC BBB ;CF=1,跳转

ADD AX,07H ;CF=0,AX中值加07H

BBB:ADD AX,30H ;AX中数值加30H,得到对于ASCII值

MOV DX,AX

MOV AH,02H ;显示一位

INT 21H

POP AX

PUSH CX

MOV CL,4

ROL AX,CL ;右移4位,将所要显示数字置于AX最低位

POP CX

LOOP CCC

MOV DL,'H' ;显示?H?

MOV AH,02H

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

END START

【运行结果】

F);F编程计算 Z=5678H+0666H-ABCDH,并把结果显示在屏幕上。

DATAS SEGMENT

ORG 3700H

TAB DB "0","1","2","3","4","5","6","7","8",

"9","A","B","C","D","E","F"

NUM DW 5678H,0666H,0ABCDH

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START:

MOV AX,DATAS

MOV DS,AX

LEA SI,NUM

MOV AX,[SI]

ADD AX,[SI+2]

SUB AX,[SI+4]

PUSH AX

JNB CCC ;CF位为0,则转移

MOV DL,'-' ;CF位为1,则显示?-…号,并将AX中的负数,加1取反,求原码 MOV AH,02H

INT 21H

PUSH AX

DEC AX

NOT AX

CCC:MOV CX,04H ;将AX中的十六进制数显示在屏幕上

BBB:MOV BX,0010H

MOV DX,0

DIV BX

PUSH AX

MOV DI,DX ;依次求出AX中数的低位到高位,于DX中

MOV BYTE PTR DL,3700H[DI] ;查表找出对于ASCII码值,存入DL中,显示 MOV AH,02H

INT 21H

PUSH AX

LOOP BBB

MOV DL,'H' ;显示?H?

MOV AH,02H

INT 21H

MOV AH,4CH

INT 21H

CODES ENDS

END START

【运行结果】

六.实验心得:

这次实验主要是了解INT 21H 各功能块的功能和使用方法,编程后6题基本上是相似的,所以选择了几个写在报告纸上,在这次实验里面,我感觉自己用到了很多寄存器,思路也特别混乱,希望在以后不断学习中,能写出更合理更简单

的程序。

相关主题
文本预览
相关文档 最新文档