关于微机原理课的几个高深问题 大家快帮帮我阿

来源:百度知道 编辑:UC知道 时间:2024/07/03 14:09:52
1。带符号的十进制数加法程序如何编写?
2。散转程序中为什么要把输入的值作乘以2处理??
3。如何对8255的PC口进行位操作??

3个问题 能在2天内解决的加100分

第1个问题,代码如下,不过我认为直接把带符号的十进制数转化为二进制,再加法更好。

;设R2 R3为带符号的十进制加数,R2高4位为符号位,0表示正数,1表示负数
;设R4 R5为带符号的十进制被加数,R4高4位为符号位,0表示正数,1表示负数
;设R6 R7为带符号的十进制和,R6高4位为符号位,0表示正数,1表示负数;低四位为进位,
;先判断符号位,符号位相同,直接BCD加;符号位不同,判断值的大小,再决定符号
CLR A
MOV R6,A
MOV R7,A ;和清0
MOV A,R2
JZ STEP2 ;加数为正数转移
MOV A,R4
JZ STEP0 ;被加数为正数转移
ACALL NTOR6 ;负数符号存到R6高四位
JMP STEP5 ;转下一步
STEP0:
CLR C
MOV A,R3
SUBB R5
JC STEP5 ;如果R3<R5转移
ACALL NTOR6 ;负数符号存到R6高四位
JMP STEP3
STEP2:
MOV A,R4
JZ STEP5 ;被加数为正数转移
CLR C
MOV A,R3
SUBB R5
JC STEP4 ;如果R3<R5转移
STEP3:
MOV A,R5
ACALL R100
ADD A,R3
DA
MOV R7,A ;十进制数相加,保存到R7
JMP STEP6
STEP4:
ACALL NTOR6 ;负数符号存到R6高四位
STEP5:
MOV A,R3
ACALL R100
ADD A,R5
DA
MOV R7,A ;十进制数相加,保存到R7
JMP STEP6
STEP5:
MOV A,R3 ;十进制数相加,存到R7
ADD