永发信息网

汇编问题:双字有符号数如何比较大小。

答案:2  悬赏:10  手机版
解决时间 2021-03-30 13:49
  • 提问者网友:太高姿态
  • 2021-03-30 06:20
汇编问题:双字有符号数如何比较大小。
最佳答案
  • 五星知识达人网友:琴狂剑也妄
  • 2021-03-30 06:28
比较双精度数大小,要比较一次或两次。
第一次,先比较高位字,按有符号数规则分大小:大的大,小的小
若高位字相等,再比较低位字,按无符号数规则分大小:高的大,低的小

所以,你程序代码段中???代码可这样编写:

MOV AX, DATA ; 段初始化
MOV DS, AX
MOV AX, STACK
MOV SS, AX

MOV DX, WORD PTR BUFA+2 ; 按题意,将数送入DX,AX, BX, CX
MOV AX, WORD PTR BUFA
MOV BX, WORD PTR BUFB+2
MOV CX, WORD PTR BUFB

CMP DX, BX ; 先比高位字
JG MOVE_A ; A大
JL MOVE_B ; B大
CMP AX, CX ; 高位字相等就再比低位字
JAE MOVE_A ; A大
JMP MOVE_B ; B大

MOVE_A:
MOV WORD PTR BUFC+2, DX ; A大
MOV WORD PTR BUFC, AX
JMP EXIT

MOVE_B:
MOV WORD PTR BUFC+2, BX ; B大
MOV WORD PTR BUFC, CX
EXIT:

如果题目是bufa>bufb,则把1送入dx,bufa=bufb,则把0送入dx,bufa
MOV AX, DATA ; 段初始化
MOV DS, AX
MOV AX, STACK
MOV SS, AX

MOV DX, WORD PTR BUFA+2 ; 按题意,将数送入DX,AX, BX, CX
MOV AX, WORD PTR BUFA
MOV BX, WORD PTR BUFB+2
MOV CX, WORD PTR BUFB

CMP DX, BX ; 先比高位字
JG MOVE_A ; A大
JL MOVE_B ; B大
CMP AX, CX ; 高位字相等就再比低位字
JA MOVE_A ; A大
JZ MOVE_0 ; 相等
JMP MOVE_B ; B大

MOVE_A:
MOV DX, 1 ; A大
JMP EXIT

MOVE_B:
MOV DX, -1 ; B大
JMP EXIT

MOVE_0:
MOV DX, 0

EXIT:追问亲,你好!我也是用的这种方法,但是老师说没这么复杂。。所以不知道该怎么写。。追答老师说没这么复杂,是因为你定义了BUFA和BUFB。

题目说数据存在DX, AX, BX, CX这四个寄存器中,所以可以取消数据段中BUFA和BUFB的定义,并将程序开头的将数据存入四个寄存器的代码删掉。
全部回答
  • 1楼网友:三千妖杀
  • 2021-03-30 07:05
得减两次。
MOV AX, bufa
MOV BX, bufb
SUB AX, BX
MOV AX, bufa + 2
MOV BX, bufb + 2
SBC AX, BX
JL XIAO
;把 bufa 送到 bufc
XIAO:
;把 bufb 送到 bufc
END追问您好!大小的判断可以写详细一些吗?这里是有符号数的比较额,我是这样想的:先比较高位,如果相等的话,就比较低位;如果不相等,就比较高位。追答bufa 减去 bufb,是低16位相减,产生的借位,再用到高16位的相减。
JL、JG,都是针对有符号数运算的判断。
----
先比较高位,如果相等的话,就比较低位;如果不相等,就比较高位。
这思路可以的。只是当数字较小(仅仅几个字节)时,这方法反而更麻烦。追问谢谢,如果题目是bufa>bufb,则把1送入dx,bufa=bufb,则把0送入dx,bufabufa:823affffh
bufb:823aacdeh
je ee
jg gg
mov dx,-1 ;bufajmp exit
gg: mov dx,1 ;bufa>bufb
jmp exit
ee: mov dx,0
最后dx里面出现的0,我哪里写错了呢?追答在:
je ee
jg gg
的前面,应该先做一次减法。追问亲,我有减的。。。
mov ax,word ptr bufa
mov bx,word ptr bufb
sub ax,bx
mov ax,word ptr bufa+2
mov bx,word ptr bufb+2
sbb ax,bx
je ee
jg gg
但是还是不行,求详解。。拜托了%>_<%追答哦,相等!
你的运算,是低16位相等,JE,条件就成立了。
DD,应该判断,两次都相等,才是相等。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯