MOV CL,TEMP+2 MOV BL,TEMP+3 MOV AL,TEMP+4
MAIN ENDP CODE ENDS
END START
8、已定义了两个整数变量A、B,试编写程序完成下列功能:1、若两个数中有一个是奇数,则将奇数存放在A中,偶数存放在B中。2、若两个数均为奇数,则将两数均加1后存回原变量。
DATAREA SEGMENT
A DW ? B DW ? DATAREA ENDS CSEG SEGMENT MAIN PROC FAR
ASSUME CS:CSEG,DS:DATAREA START:
PUSH DS SUB AX,AX PUSH AX
MOV AX,DATAREA MOV DS,AX BEGIN:
MOV AX,A MOV BX,B XOR AX,BX ;AX,BX异或
TEST AX,0001H ;测试最低位,0则两数同奇偶 JZ CLASS ;为0则转至CLASS
TEST BX,0001H ;若最低位为0则为偶数,否则为奇数 JZ EXIT
;为0则转至EXIT
XCHG BX,A ;交换BX/A中值,即A中存放奇数 MOV B,BX
;将BX中数送入B中,B中存放偶数
JMP EXIT CLASS:
TEST BX,0001H ;测试BX是否为奇数 JZ EXIT ;不是则转至EXIT
INC B ;否则B自增1 INC A
;A自增1
EXIT:
9
RET MAIN ENDP CSEG ENDS
END START
9、判断寄存器AH和AL中第3位是否相同,如相同,AH置0,否则AH置全1。 答:XOR AH,AL
AND AH,40H JNZ ONE JMP NEXT ONE:MOV AH,0FFH NEXT:……
10、实现下列算式:W=X+Y+36-Z。设X、Y、Z、W均为双字长数据,各自的低十六位数和高十六位数分别存放在X、X+2、Y、Y+2、Z、Z+2的存储单元中,结果的低十六位字和高十六位字分别存放在W和W+2两个单元中。 答:
DATA SEGMENT
X DD Y DD Z DD W DD
;AH置全1
MOV AH,0
;异或判定是否相同,结果存放在AH中 ;将除第三位外的所有位置0 ;若不为0,即不相等,转至ONE ;否则AH置0
DATA ENDS CODE SEGMENT
ASSUME CS:CODE,DS:DATA MOV DS,AX
MOV AX,X ADD AX,Y MOV BX,X+2 ADC BX,Y+2 ADD AX,36 ADC BX,0 SUB AX,Z SBB BX,Z+2 MOV W,AX MOV W+2,BX END START START:
CODE ENDS
11、写出执行以下计算的指令序列,其中U、V、W和Z均为存放16位带符号数单元的地址。
10