+ -
当前位置:首页 → 问答吧 → 汇编一行代码很费解!求解~~

汇编一行代码很费解!求解~~

时间:2010-11-30

来源:互联网

求出首地址为DATA的100DH字数组重的最小偶数

下面是代码! 这句不明白~~
MOV DX,0FFFEH ;最小偶数 
为什么0FFFEH是最小的偶数??不是最大吗?费解~~



DSEG SEGMENT
  DATA DW 1,2,3,4,5,6,7,8,9,0AH,55H ;共100DH个数
DSEG ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS:CODE,DS:DSEG
start: PUSH DS
MOV AX,0
PUSH AX
  MOV AX,DSEG
  MOV DS,AX
MOV DX,0FFFEH ;最小偶数
MOV CX,11
LEA BX,DATA
NEXT: MOV AX,[BX]
CMP AX,DX
JNB NEXT1 ;比最小的偶数大,转下一步
TEST AX,1
JNZ NEXT1 ;是奇数,转下一步
MOV AX,[BX]
MOV DX,AX ;更小的偶数存入DX
NEXT1: INC BX
INC BX
LOOP NEXT
MOV AX,DX
RET
MAIN ENDP
CODE ENDS
END MAIN

作者: jiafeimao6   发布时间: 2010-11-30

作为有符号数来说,他就是最小的, 应为MSB为1,表示负

作者: masmaster   发布时间: 2010-11-30

MOV DX,0FFFEH

这不是最小偶数,而是最大偶数。寻找最小值时,先给表示结果的变量一个很大的初值,逐个比较,遇到比当前值小的就换成这个更小的值,循环完后,结果是数组中最小的那个。

若不这样,要先取第一个做初值,再对剩下的循环。程序的整齐程度就不如前面的方法了。

作者: shzhfu   发布时间: 2010-11-30

那为什么要让那十一个数和最小的数相比啊?有必要和这么小的数相比吗?

引用楼主 jiafeimao6 的回复:
求出首地址为DATA的100DH字数组重的最小偶数

下面是代码! 这句不明白~~
MOV DX,0FFFEH ;最小偶数
为什么0FFFEH是最小的偶数??不是最大吗?费解~~



DSEG SEGMENT
DATA DW 1,2,3,4,5,6,7,8,9,0AH,55H ;共100DH个数
DSEG ENDS
CODE SEGMENT
MAIN PROC FA……

作者: jiafeimao6   发布时间: 2010-11-30

哦~~有点儿明白了!

引用 1 楼 masmaster 的回复:
作为有符号数来说,他就是最小的, 应为MSB为1,表示负

作者: jiafeimao6   发布时间: 2010-11-30

这样啊 这个解释比较合理哦

引用 2 楼 shzhfu 的回复:
MOV DX,0FFFEH

这不是最小偶数,而是最大偶数。寻找最小值时,先给表示结果的变量一个很大的初值,逐个比较,遇到比当前值小的就换成这个更小的值,循环完后,结果是数组中最小的那个。

若不这样,要先取第一个做初值,再对剩下的循环。程序的整齐程度就不如前面的方法了。

作者: jiafeimao6   发布时间: 2010-11-30

0FFFEH有符号数=(-2)
从总体来看这个程序有问题,如果是有符号数用JNB就不妥了,逻辑似乎也有问题了.

作者: nanlingcg   发布时间: 2010-11-30

引用 6 楼 nanlingcg 的回复:
0FFFEH有符号数=(-2)
从总体来看这个程序有问题,如果是有符号数用JNB就不妥了,逻辑似乎也有问题了.


很对!用JNB就应该换成最大正偶数7FFFH=32766,若用0FFFFH则应该表示最大无符号偶数(65534),后面就要用JNL

作者: shzhfu   发布时间: 2010-11-30