1、1第四章习题 参考答案41 若有两个无符号数。 分别存放在内部存储器 50H、51H 单元中,试编写一个、xy程序实现 ,结果存人 52H、53H 两个单元中。10MOV A,50H MOV B,#10 MUL AB ;积的高、低字节分别在 B、A 中ADD A,51H MOV 53H,A MOV A,#00HADDC A,B ;积的高字节加进位位MOV 52H,A 46 在 DATAl 单元中有一个带符号 8 位二进制数。编一程序,按以下关系计算 y值,送 DATA2 5 0= 0,则 X+5SJMP ZERO ;NEG: CLR C ;减法之前先清 Cy 位SUBB A,#05H ; ZE
2、RO: MOV DATA2,A ; 存结果47 设内部 RAM 中 30H 和 31H 单元中有两个带符号数,求出其中的大数存放在32H 单元中。解一:思路:若两数同号,则值大的数大;两数异号,正数值大ORG 0000HSJMP START ORG 0030HSTART: MOV A,30H ; XRL A,31H ; 两数异或JB ACC.7,YIHAO ; 两数异号TONGHAO: CLR C ; 两数同号MOV A, 30HSUBB A, 31H2JC LOOP1,LOOP0: MOV A,30H ;同号被减数大,值大LOOED: MOV 32H ,ASJMP $LOOP1: MOV A
3、,31H ;异号被减数大,值小 SJMP ED ;YIHAO: MOV A,30H ;异号,哪个正,其值大JNB ACC.7,LOOP0SJMP LOOP1 END411 编一程序,将存储区 DATAl 单元开始的 20 个单字节数据依次与 DATA2 单元为起始地址的 20 个单字节数据进行交换。START: MOV R0,# DATA1 ; 建立源操作数地址指针 MOV R1,# DATA2 ; 建立目标操作数地址指针MOV R6,#20 ; 置计数长度LOOP: MOV A,R0 ; 取数据 XCH A,R1 ;MOV R0,A ; 交换数据INC R0 ; 地址指针加 1INC R1
4、; 地址指针加 1DJNZ R6,LOOP ; 412 试编写一程序,将存储区 DATAl 单元开始的 50 个单字节数逐一移至 DATA2单元开始的存储区中。START: MOV R0,# DATA1 ; 建立源操作数地址指针 MOV R1,# DATA2 ; 建立目标操作数地址指针MOV R6,#50 ; 置计数长度LOOP: MOV A,R0 ; MOV R1,A ; INC R0 ; 地址指针加 1INC R1 ; 地址指针加 1DJNZ R6,LOOP ; 413 试编一采用查表法求 120 的平方数子程序( 要求:x 在累加器 A 中,1x20,平方数高位存在 R6,低位在 R7
5、)。解:为编程方便起见,每一数的平方在表中统一用双字节来存放,这样只要把数乘 2加表头地址,就可以找到对应的平方数的高字节存放的地址,连续取两个字节即可。START: MOV DPTR,#TAB ; 建立表头地址指针 MOV B,AADD A,B3MOV B,A ;用 B 保存 2*x 的值LOOP: MOVC A,A+DPTRMOV R5,AINC DPTRMOV A,BMOVC A,A+DPTRMOV R6,ARET ;TAB: DB 00H,00H,00H,01H,00H,04H,00H,09H,00H,16H ;平方数用 BCD 表示(也可用DB 00H,25H,00H,36H,00H,49H,00H,64H,00H,81H ; 十六进制表示)DB 01H,00H,01H,21H,01H,44H,01H,69H,01H,96H DB 02H,25H,02H,56H,02H,89H,03H,24H,03H,61H,04H,00HEND若平方表从 0 的平方存放,把程序中红色的 DEC A 指令去掉,若表从 1 的平方存放,则将 DEC A 指令加上。