注册 登录
编程论坛 汇编论坛

为什么此程序无法在masm for windows集成环境中运行?求解答?急急急!(一运行就无法响应!)

wj13370336 发布于 2012-11-28 16:30, 589 次点击
试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。

答:DATA_SEG SEGMENT

NUM DB 5

DATA_LIST DW -1, 0, 2, 5, 4, 5 DUP (?)

MAX DW ?

MIN DW ?

DATA_SEG ENDS

;----------------------------------------------------------------

CODE_SEG SEGMENT

MAIN PROC FAR

ASSUME CS: CODE_SEG, DS: DATA_SEG

START: PUSH DS ;设置返回DOS

SUB AX, AX

PUSH AX

MOV AX, DATA_SEG ;给DS赋值

MOV DS, AX



MOV CX, 4 ;程序段开始

LEA BX, DATA_LIST

MOV AX, [BX]

MOV MAX, AX

MOV MIN, AX

ROUT1: ADD BX, 2

MOV AX, [BX]

CMP AX, MAX

JNGE ROUT2

MOV MAX, AX

ROUT2: CMP AX, MIN

JNLE ROUT3

MOV MIN, AX

ROUT3: LOOP ROUT1 ;程序段结束

RET

MAIN ENDP

CODE_SEG ENDS

;----------------------------------------------------------------

END START

2 回复
#2
woxingx2012-12-01 13:09
这里错了应该是 LEA AX,[BX]  //就是把BX的偏移地址AX利用LEA这个指令,或者MOV AX,OFFSET BX  这条语句也可以  希望可以帮到你

#3
woxingx2012-12-01 13:23
ROUT1: ADD BX, 2
MOV AX, [BX]
CMP AX, MAX
JNGE ROUT2   ;这里改一下  如果ax比 max大那么就把ax给max  
修改语句为:  jnce  A1
A1: mov max,ax
下面的小于比较也是类似
1