;.
2. 执行 run 程序,打开程序 aux,选择 memory,查看地址 0710:0000,得到如下界面:
经验证当 x、y 都大于 0 时, Z 值为 1,结果满足题目要求且无错误。
(3) ) x、y 同为负
1. 执行 emulate 程序, 对源 程序进行调试 , 生 成 original source code 和 emulator:noname.exe_文件,得到如下界面:
2. 执行 run 程序,打开程序 aux,选择 memory,查看地址 0710:0000,得到如下界面:
;.'
;.
x、y 都小于 0 时, Z 值为 -1,结果符合题目要求且无错误。
六、思考题
本程序中判定符号用的是 CMP 指令,而用逻辑操作指令也可以。比如,可 以用 AND 指令,使其进行自身与操作,反映到 用 TEST 指令编之。
答:
1.输入源程序如下:
SF 标志位,还可以用 TEST 指
令直接测试最高位,并将结果反映到 ZF 标志位,然后根据 ZF 标志位判断。试
DATA X Y Z DATA CODE START:
SEGMENT DB DB DB ENDS ASSUME MOV MOV TEST JNE TEST JNE MOV JMP L1: JE MOV
66 -100 0
SEGMENT
CS:CODE,DS:DATA AX,DATA DS,AX X,80H L1 Y,80H L2 Z,1 EXIT TEST Y,80H L2 Z,-1 EXIT Z,0 AH,4CH 21H
L2: EXIT:
JMP MOV MOV INT
;.'
;.
CODE ENDS END
START
2. 执行 emulate 程序, 对源 程序进行 调试 , 生成 original source code 和 emulator:noname.exe_文件,结果无错误。 3. 执行 run 程序,打开程序 aux,选择 memory,查看地址 0710:0000,结果如下 图
经验证运行结果为 42 9C 00,即 66 -100 0,x、y 异号, Z 值为 0,无错误。
七、扩展题
如果不采用上述方法判断两数的符号, 而采用两数异或的方法判断两数的符号,当两数的符号不相同时,其结果的最高位必定为 1;当两数的符号相同时, 其结果的最高位必定为 0;在根据其中一数的符号是正还是负决定两数是正数还是负数。请做程序完成。 (1) ) x、y 同号 1. 输入源程序: DSEG SEGMENT X DB -3 Y DB -4 Z DB 0
DSEG ENDS
CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START: MOV AX,DSEG MOV DS,AX MOV AL,X MOV BL,Y XOR AL,BL JS L1 JGE L2 MOV Z,1 JMP EXIT L1: MOV Z,1 JMP EXIT L2: MOV Z,0
;.'
;.
EXIT:
MOV AH,4CH INT 21H
CSEG ENDS
START END
2. 执行 emulate 程序, 对源 程序进行 调试 , 生成 original source code 和 emulator:noname.exe_文件,结果无错误。 3. 执行 run 程序,打开程序 aux,选择 memory,查看地址 0710:0000,结果如下 图。
(2) ) x、y 异号 1. 输入源程序: DSEG SEGMENT X DB 5 Y DB -6 Z DB 0 DSEG ENDS CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX MOV AL,X MOV BL,Y XOR AL,BL JS L1 JE L2 MOV Z,1 JMP EXIT
L1: MOV Z,1
JMP EXIT
L2: MOV Z,0 EXIT: MOV AH,4CH
INT 21H
CSEG ENDS
END START
2. 执行 emulate 程序, 对源 程序进行 调试 , 生成 original source code 和 emulator:noname.exe_文件,结果无错误。 3. 执行 run 程序,打开程序 aux,选择 memory,查看地址 0710:0000,结果如下
;.'
相关推荐: