2.3 运算程序设计实验
2.3.1 实验目的
了解运算类指令以及运算类程序的设计方法。
2.3.2 实验设备
PC 机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或
“TD-PITE 教学实验系统+TD-51 系统平台”
2.3.3 实验内容
1. 多字节十进制加法程序,被加数存放于 20H 起始的 RAM 空间,加数存放于 2AH 起始的
RAM 空间,将两数相加,结果存放于 20H 起始的 RAM 空间;
2. 双字节无符号数乘法程序,被乘数在 R2R3 中,乘数在 R4R5 中,将相乘的结果保存在
20H ~23H 中;
3. 双字节除法程序,被除数在 R7R6 中,除数在 R5R4 中,将商存入 R7R6 中,余数存入
R3R2 中。
2.3.4 实验步骤
1. 多字节加法程序
Asm3-1.asm
实验参考例程:( )
ORG 0000H
LJMP MAIN
ORG 0100H ; 执行程序前先修改R7的值
MAIN: MOV R0, #20H ; 被加数起始地址
MOV R1, #2AH ;加数起始地址
CLR C
LP1: MOV A, @R0
ADDC A, @R1 ; 带进位加法运算
DA A ; 十进制调整
MOV @R0, A ; 保存运算结果
INC R0 ; 指向下一单元
INC R1
DJNZ R7, LP1
CLR A
MOV ACC.0, C
MOV @R0, A ; 最高位有进位时此地址中为1
NOP
SJMP MAIN ; 设置断点查看运算结果
; 若需继续运算, 改变加数, 被加数及R7
END
实验步骤:
(1)编写实验程序,程序流程图如图 2-3-1 所示,编译、链接无误后,进入调试状态;
(2)为被加数及加数赋值,即 4574 与 6728,低位在低字节,修改字节数 R7 为 2;
(3)在语句行 SJMP MAIN设置断点,然后运行实验程序;
(4)当程序停止运行时,查看 20H 单元起始的内容,应为 02、13、02;
(5)修改被加数、加数及字节数 R7 的值,重新运算,验证程序的功能。
2. 双字节无符号数乘法
利用单字节乘法指令来扩展成多字节乘法运算,扩展时以字节为单位进行乘法运算。假定 被乘数为 R2R3,乘数为 R4R5,乘积写入 R0 指向的内部 RAM 空间,运算法则见图 2-3-2。
实验参考程序:(Asm3-2.asm )
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R0, #23H ; 运算结果低位地址
MOV A, R0
PUSH ACC
CLR A
MOV R7, #4
LP1: MOV @R0, A ; 运算结果存储单元清零
DEC R0
DJNZ R7, LP1
POP ACC
MOV R0, A
MOV A, R3
MOV B, R5 MUL AB ; 计算R3*R5
MOV @R0, A ; 计算的低8位保存
MOV A, B
DEC R0
MOV @R0, A ; 保存运算的高8位
MOV A, R2
MOV B, R5
MUL AB ; 计算R2*R5
ADD A, @R0 ; 此次运算低8位+R3*R5运算的高8位
MOV @R0, A
DEC R0
MOV A, B
ADDC A, #00H ;R2*R5的高8位加进位位
MOV @R0, A
INC R0
MOV A, R3
MOV B, R4
MUL AB ; 计算R3*R4
ADD A, @R0
MOV @R0, A
MOV A, B
DEC R0
ADDC A, @R0
MOV @R0, A
DEC R0 CLR A
ADDC A, #00H
MOV A, @R0
MOV A, R2
MOV B, R4
MUL AB ; 计算R2*R4
INC R0
ADD A, @R0
MOV @R0, A
MOV A, B
DEC R0
ADDC A, @R0
MOV @R0, A
NOP
LJMP MAIN ; 设置断点查看运算结果
; 如需进行下一次运算, 可修改R2R3,R4R5的值
END
实验步骤:
(1)编写实验程序,经编译、链接无误后,联机调试;
(2)改变被乘数 R2R3 及乘数 R4R5 的值,如 0x03、0x50 和 0x04、0x60;
(3)在语句行 LJMP MAIN设置断点,然后运行程序;
(4)程序停止后,查看存储区 20H 、21H 、22H 、23H 的内容,应为 00、0E 、7E 、00;
(5)重新改变被乘数 R2R3 及乘数 R4R5 的值,运行程序,验证程序的正确性。
2.3 运算程序设计实验
2.3.1 实验目的
了解运算类指令以及运算类程序的设计方法。
2.3.2 实验设备
PC 机一台,TD-NMC+教学实验系统、或“TD-PIT++教学实验系统+TD-51 系统平台”、或
“TD-PITE 教学实验系统+TD-51 系统平台”
2.3.3 实验内容
1. 多字节十进制加法程序,被加数存放于 20H 起始的 RAM 空间,加数存放于 2AH 起始的
RAM 空间,将两数相加,结果存放于 20H 起始的 RAM 空间;
2. 双字节无符号数乘法程序,被乘数在 R2R3 中,乘数在 R4R5 中,将相乘的结果保存在
20H ~23H 中;
3. 双字节除法程序,被除数在 R7R6 中,除数在 R5R4 中,将商存入 R7R6 中,余数存入
R3R2 中。
2.3.4 实验步骤
1. 多字节加法程序
Asm3-1.asm
实验参考例程:( )
ORG 0000H
LJMP MAIN
ORG 0100H ; 执行程序前先修改R7的值
MAIN: MOV R0, #20H ; 被加数起始地址
MOV R1, #2AH ;加数起始地址
CLR C
LP1: MOV A, @R0
ADDC A, @R1 ; 带进位加法运算
DA A ; 十进制调整
MOV @R0, A ; 保存运算结果
INC R0 ; 指向下一单元
INC R1
DJNZ R7, LP1
CLR A
MOV ACC.0, C
MOV @R0, A ; 最高位有进位时此地址中为1
NOP
SJMP MAIN ; 设置断点查看运算结果
; 若需继续运算, 改变加数, 被加数及R7
END
实验步骤:
(1)编写实验程序,程序流程图如图 2-3-1 所示,编译、链接无误后,进入调试状态;
(2)为被加数及加数赋值,即 4574 与 6728,低位在低字节,修改字节数 R7 为 2;
(3)在语句行 SJMP MAIN设置断点,然后运行实验程序;
(4)当程序停止运行时,查看 20H 单元起始的内容,应为 02、13、02;
(5)修改被加数、加数及字节数 R7 的值,重新运算,验证程序的功能。
2. 双字节无符号数乘法
利用单字节乘法指令来扩展成多字节乘法运算,扩展时以字节为单位进行乘法运算。假定 被乘数为 R2R3,乘数为 R4R5,乘积写入 R0 指向的内部 RAM 空间,运算法则见图 2-3-2。
实验参考程序:(Asm3-2.asm )
ORG 0000H
LJMP MAIN
ORG 0100H
MAIN: MOV R0, #23H ; 运算结果低位地址
MOV A, R0
PUSH ACC
CLR A
MOV R7, #4
LP1: MOV @R0, A ; 运算结果存储单元清零
DEC R0
DJNZ R7, LP1
POP ACC
MOV R0, A
MOV A, R3
MOV B, R5 MUL AB ; 计算R3*R5
MOV @R0, A ; 计算的低8位保存
MOV A, B
DEC R0
MOV @R0, A ; 保存运算的高8位
MOV A, R2
MOV B, R5
MUL AB ; 计算R2*R5
ADD A, @R0 ; 此次运算低8位+R3*R5运算的高8位
MOV @R0, A
DEC R0
MOV A, B
ADDC A, #00H ;R2*R5的高8位加进位位
MOV @R0, A
INC R0
MOV A, R3
MOV B, R4
MUL AB ; 计算R3*R4
ADD A, @R0
MOV @R0, A
MOV A, B
DEC R0
ADDC A, @R0
MOV @R0, A
DEC R0 CLR A
ADDC A, #00H
MOV A, @R0
MOV A, R2
MOV B, R4
MUL AB ; 计算R2*R4
INC R0
ADD A, @R0
MOV @R0, A
MOV A, B
DEC R0
ADDC A, @R0
MOV @R0, A
NOP
LJMP MAIN ; 设置断点查看运算结果
; 如需进行下一次运算, 可修改R2R3,R4R5的值
END
实验步骤:
(1)编写实验程序,经编译、链接无误后,联机调试;
(2)改变被乘数 R2R3 及乘数 R4R5 的值,如 0x03、0x50 和 0x04、0x60;
(3)在语句行 LJMP MAIN设置断点,然后运行程序;
(4)程序停止后,查看存储区 20H 、21H 、22H 、23H 的内容,应为 00、0E 、7E 、00;
(5)重新改变被乘数 R2R3 及乘数 R4R5 的值,运行程序,验证程序的正确性。