河北工业大学汇编实验三
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三算术运算与代码转换程序设计
计102
一、实验目的
1)掌握算术运算程序的设计方法。
2)掌握代码转换程序的设计方法。
3)进一步掌握各种程序结构。
4)熟练掌握和使用用DEBUG调试程序。
二、实验内容
1)编制两个多字节整数加法和减法程序,并将结果按十六进制形式显示在屏幕上。
2)编制程序实现二进制定点数与十进制数的ASCII码串之间转换,并将结果显示在屏幕上。
3)编写程序计算从键盘输入两个不超过四位的十进制数的和、差、积、商,并以十进制形式输出。
4)写程序把从键盘输入的四位十六进制数转换为压缩的BCD码,并显示输出。
5)编写一通用过程用来将十进制数(从键盘输入)转换为P(从键盘输入)进制数。
三、实验设备
PC机一台
四、实验步骤
1) 按程序流程图编制实验程序。
2) 输入源程序。
3) 汇编、连接程序,执行程序,检查结果。
4) 程序的执行可用DEBUG的G命令,也可用T命令单步跟踪执行。
5) 用D命令检查执行结果。
五、实验源程序
1)DATA SEGMENT
A D
B 82H,34H,56H,78H,2AH,0BCH,0EFH,00H
B DB 34H,56H,78H,9AH,0BCH,0EFH,16H LENB EQU $-B
LEN2 EQU (B-A)*2
RES DB LEN2 DUP('?'),'$'
DA TA ENDS
STACK SEGMENT PARA STACK
DW 20 DUP (?)
STACK ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
START: MOV AX,DA TA
MOV DS,AX;多字节相加
MOV SI,0
CLC
MOV CX,LENB
LOP1: MOV AL,A[SI]
ADC AL,B[SI]
MOV A[SI],AL
INC SI
LOOP LOP1
ADC BYTE PTR A[SI],0;输出
MOV SI,0
ADD SI,LENB
MOV DI,0
MOV CX,LENB+1
LOP2: PUSH CX
MOV AL,A[SI];高位转换
MOV BL,AL
MOV CL,4
SHR BL,CL
CMP BL,0AH
JB NEXT1
ADD BL,07H
NEXT1: ADD BL,30H
MOV RES[DI],BL
INC DI;低位转换
MOV BL,AL
AND BL,0FH
CMP BL,0AH
JB NEXT2
ADD BL,07H
NEXT2: ADD BL,30H
MOV RES[DI],BL
INC DI
DEC SI
POP CX
LOOP LOP2
MOV AH,09H
MOV DX,OFFSET RES
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
3).MODEL SMALL
CODE SEGMENT
ASSUME CS:CODE,DS:CODE
CR EQU 000DH
LF EQU 000AH
KBBACK EQU 0008H
; -------------------------------------; 功能:显示指定地址(STR_ADDR)的字符串
; 入口:
; STR_ADDR=字符串地址(要求在数据段)
; 用法: OUTPUT STR_ADDR
; 用法举例:OUTPUT PROMPTSTR
OUTPUT MACRO STR_ADDR
LEA DX,STR_ADDR
MOV AH,9
INT 21H
ENDM
; 功能:输出一个字符
; 入口:DL=要显示的字符
OUTPUT_CHR PROC NEAR
PUSH AX
MOV AH,02H
INT 21H
POP AX
RET
OUTPUT_CHR ENDP
; -------------------------------------; 功能:输出回车换行
OUTPUT_CTLF PROC NEAR
PUSH AX
PUSH DX
MOV AH,02H
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
POP DX
POP AX
RET
OUTPUT_CTLF ENDP
; 功能:取光标位置
; 入口:无
; 出口:DH=行号,DL=列号
GETCURSOR PROC NEAR
PUSH AX
PUSH BX
PUSH CX
XOR BX,BX
MOV AH,3
INT 10H
MOV CURSOR_ROW,DH
MOV CURSOR_COL,DL
POP CX
POP BX
POP AX
RET
CURSOR_ROW DB ?
CURSOR_COL DB ?
GETCURSOR ENDP
; -------------------------------------; 功能:置光标位置
; 入口:CURSOR_ROW=行坐标; CURSOR_COL: 列坐标)
SETCURSOR PROC NEAR