ENDP
CODE ENDS
END START
4.BCD码转换为二进制码
实验源文件名DVA3_4.ASM(在文件夹“ASM_汇编例程”中) 实验程序清单如下:
STACK1 SEGMENT STACK
DW 256 DUP(?) STACK1 ENDS
DDATA SEGMENT
MES DB 'The BCD code of binary are:$' BUF DB 01H,07H,03H,04H,05H,01H,06H,08H DB 10H DUP(0) DDATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DDATA
START: MOV AX,DDATA MOV DS,AX MOV CX,0004H
MOV DI,OFFSET BUF A1: MOV AL,[DI] ADD AL,AL MOV BL,AL ADD AL,AL ADD AL,AL ADD AL,BL INC DI MOV AH,00H
ADD AL,[DI] MOV [DI+07H],AX INC DI LOOP A1
MOV DX,OFFSET MES MOV AH,09H
- 21 -
INT 21H
MOV CX,04H
MOV DI,OFFSET BUF ADD DI,08H A2: MOV AX,[DI] CALL SHWORD MOV DL,20H MOV AH,02H
INT 21H
INC DI INC DI LOOP A2
START0: MOV AH,06H MOV DL,0FFH INT 21H
JE START0 MOV AX,4C00H INT 21H
SHWORD PROC NEAR MOV BL,AH CALL SHOW MOV BL,AL CALL SHOW RET ENDP
SHOW PROC NEAR PUSH AX PUSH DX MOV AL,BL
AND AL,0F0H SHR AL,4 CMP AL,0AH JB C2 ADD AL,07H C2: ADD AL,30H MOV DL,AL
MOV AH,02H
;判断是否有键按下START0 DOS 4位 A以上的数
- 22 -
;若没有转;有键返回 ;取高
;是否是 ;显示字符
INT 21H MOV AL,BL AND AL,0FH CMP AL,0AH JB C3
;取低4位
ADD AL,07H C3: ADD AL,30H
MOV DL,AL ;显示字符
MOV AH,02H INT 21H POP DX POP AX RET
ENDP CODE ENDS
END START
- 23 -
实验四 运算类程序实验
一、实验目的
(1) 掌握运算类指令编程及调试方法。
(2) 掌握运算类指令对各状态标志位的影响及测试方法。
二、实验内容及说明
80x86 指令系统提供了实现加、减、乘、除运算的基本指令,可对表4-1 所示的数据类型进行算术运算。
表2-4-1 数据类型算术运算表 数制 运算符 操作数
二进制 带符号 无符号 +、-、÷、× 字节、字、多精度 BCD 码 组合 +、- 非组合 +、-、÷、× 字节(二位数字) 字节(一位数字) 1.二进制双精度加法运算
本实验要求计算X+Y=Z ,将结果Z 输出到屏幕,其中X=001565A0H ,Y=0021B79EH。 实验利用累加器AX ,先求低十六位和,并存入低址存储单元,后求高16 位和,再存入高址存储单元。由于低位和可能向高位有进位,因而高位字相加语句需用ADC 指令,则低位相加有进位时,CF=1,高位字相加时,同时加上CF 中的1。在80386 以上微机中可以直接使用32位寄存器和32 位加法指令完成本实验的功能。
2 .十进制数的BCD 码减法运算
本实验要求计算X-Y=Z ,其中,X、Y、Z 为BCD 码, X=0400H ,Y=0102H。
3 .乘法运算
本实验要求实现十进制数的乘法,被乘数和乘数均以BCD 码形式存放于内存中,被乘数为54320H,乘数为3H,运算结束后,将乘积在屏幕上显示。
4 .用减奇数开平方运算
80x86 指令系统中有乘除法指令但没有开平方指令,因此,开平方运算是通过程序来实现的。用减奇数法可求得近似平方根,获得平方根的整数部分。我们知道,N个自然数中的奇
2
数之和等于N ,即:
1+3+5=9=3
2
1+3+5+7=16=4
2
1+3+5+7+9+11+13+15=64=8
若要做S 的开方运算,那么就可以从S 中逐次减去自然数中的奇数1,3,5,7…,一直
- 24 -
2
进行到相减数为0 或不够减下一个自然数的奇数为止,然后统计减去自然数的奇数个数,它就是S的近似平方根。
本实验要求利用减奇法计算0040H 的开平方值,并将运算结果显示在屏幕上。
三、实验步骤
(1) 运行DVCC32JHP 软件,选择编辑Edit 菜单编写实验程序。
(2) 使用“ASM编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。汇编、连接无误的话,就直接运行程序。观察运行结果。
(3) 或使用动态调试,进入调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。
(4) 更改数据区中的数据,考察程序的正确性。
1.二进制双精度加法运算
实验源文件名DVA4_1.ASM(在文件夹“ASM_汇编例程”中) 实验程序清单如下:
STACK1 SEGMENT STACK DW 256 DUP(?) STACK1 ENDS
DATA SEGMENT
MES DB 'The result is:$' XL DW 65A0H XH DW 0015H YL DW 0B79EH YH DW 0021H DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA START: MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET MES MOV AH,09H INT 21H MOV AX,XL ADD AX,YL MOV BX,AX
- 25 -
四、参考程序