汇编语言上机实验二
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
组合BCD码是用4个二进制位表示一个十进制位,如:
MOV AL,68H MOV BL,28H
ADD AL,BL
;AL=68H+28H=90H
DAA
; 十进制调整:AL=96H
非组合BCD码是用8个二进制位表示一个十进制位。如:
MOV AX,0608H
MOV BL,09H ADD AL,BL
AAA
;AL=08H+09=11H ;十进制调整:AX=0107H
1. 从键盘输入1~4位十六进制数,存放在以HEXBUF+2为首址的4个字节单元中。其中 HEXBUF+1单元中为输入的数据个数。
字符串输入功能调用(0AH号功能调用) 格式: MOV DX, 已定义缓冲区的偏移地址 MOV AH, 0AH INT 21H
功能:从键盘接收字符,并存放到内存缓冲区。
① 执行前先定义一个输入缓冲区,缓冲区内第一个字节定义为允许最多输入 的字符个数,字符个数应包括回车符0DH在内,不能为“0”值。第二个 字节保留,在执行程序完毕后存入输入的实际字符个数。从第三个字节 开始存入从键盘上接收字符的ASCII码。若实际输入的字符个数少于定义 的最大字符个数,则缓冲区其他单元自动清0。若实际输入的字符个数大 于定义的字符个数,其后输入的字符丢弃不用,且响铃示警,一直到输 入回车键为止。整个缓冲区的长度等于最大字符个数再加2。
二.实验内容:
1、从键盘输入两个2位十进制正数转换成二进制数后,对这两个数进行相加相乘 运算,结果以十六进制数形式显示在屏幕上。
2、从键盘输入两个2位十进制正数转换成组合BCD码后,对这两个数进行相加 相乘运算,结果以十进制形式显示在屏幕上。
3、从键盘输入一个4位十进制正数并回显后,将其对应的十六进制数显示在屏幕 上。
6. 显示结果
屏幕显示字符串(9号功能调用) 格式: MOV DX, 字符串的偏移地址
MOV AH, 09H INT 21H 在使用9号功能调用时,应当注意以下问题: ① 待显示的字符串必须先放在内存一数据区(DS段)中,且以‘$’符号 作为结束标志。 ② 应当将字符串首地址的段基址和偏移地址分别存入DS和DX寄存器中。 …… BUF DB ‘HOW DO YOU DO?’, 0AH, 0DH, ‘$’ …… MOV AX, DATA MOV DS, AX …… MOV DX, OFFSET BUF MOV AH, 09H INT 21H …… 执行程序,在屏幕上显示“HOW DO YOU DO?”字符串。
MOV CH,HEXBUF+1 ;取输入数据个数
HEX1: MOV AL,[SI]
;取一个十六进制数字符
CMP AL,'9'
JBE NUMB
;小于等于‘9’是数字符
SUB AL,07H
;是字母符
NUMB: AND AL,0FH
MOV CL,4
SAL BX,CL
OR BL,AL
INC SI
DEC CH
三、实验要求及调试步骤
1.
程序说明。说明程序的功能、结构。
2.
调试说明。包括上机调试的情况、上机调试步骤、调试所遇到的
问题是如何解决的,并对调试过程中的问题进行分析,对执行结
果进行分析。
3.
写出源程序清单和执行结果。
【举例】从键盘输入4位十六进制数(它对应的二进制数是补码表示 的带符号数),把它们转换为带符号非组合型BCD码,并在屏幕 上显示出来。
3. 确定十进制数的符号,并把符号(+或-)存放在BCDBUF单元中;
使用指令TEST对最高位进行判定,如若最高位为1,则是负数,反之。
4. 对BX中的二进制数采用前述算法转换为十进制数(非组合型BCD码), 转换结果存放在以BCDBUF+1为首址的5个字节单元中;
5. 把转换结果的5个非组合型BCD码形成相应的ASCII码。
实验要求一参考程序:
TITLE CONVERT HEXADECIMAL TO BCD
DATA SEGMENT
PROMPT DB "INPUT HEXADECIMAL(4DIGITS):$'
HEXBUF DB 5,0,5 DUP(0)
DISP DB 0AH,0DH
BCDBUF DB 6 DUP(0),'$'
汇编语言上机实验(二) 4学时
国家级计算机实验示范中心
实验二 数制、码制和子程序的编程与调试
一.实验目的:
1. 熟练掌握编写汇编语言原程序的基本方法和基本框架。 2. 熟练使用DEBUG调试程序。 3. 掌握十六进制数与ASCII码之间,ASCII码与BCD码之间的转换。 4. 掌握用DOS功能调用,实现字符的输入和显示。 5. 掌握子程序的编程与调试方法。
② 应当将缓冲区首地址的段基址和偏移地址分别存入DS和DX寄存器中。
……
BUF
DB 25 ; 缓冲区长度
ACTHAR DB ? ; 保留单元, 存放输入的实际字符个数
CHAR DB 25 DUP (?) ; 定义25个字节存储空间
DB ‘$’
…… MOV AX, DATA
字符
对应的ASCII码
MOV DS, AX
DATA ENDS
STACK1 SEGMENT PARA STACK
DW 20H DUP(0)
STACK1 ENDS
COSEG SEGMENT
ASSUME CS:COSEG,DS:DATA,SS:STACK1
HEXBCD: MOV AX,DATA
MOV DS,AX
;输入1~4位十六进制数
JNE HEX1
;确定十进制数的符号
MOV BCDBUF,'+'
0~9
30H~39H
……
MOV DX, OFFSET BUF
A~Z
41H~5AH
MOV AH, 0AH
INT 21H
换行
0AH
……
回车
0DH
本例可从键盘接收23个 有效字符并存入以BUF
ESC键
1BH
为首地址的缓冲区中。
空格
20H
2. 将ASCII码表示的4位十六进制数转换为16位二进制数,并暂时存放在 BX中;
LEA DX,PROMPT ;显示提示信息
MOV AH,09H
INT 21H
LEA DX,HEXBUF ;输入数据
MOV AH,0AH
INT 21H
;ASCII码转换为16位二进制数并存入BX中
LEA SI,HEXBUF+2 ;取十六进制数ASCII码首址
MOV BX,0
Fra Baidu bibliotek
;暂存二进制数的寄存器清零