|
问题描述
已知,从baffuer开始存放了100个带符号的字数据,试编写一完整的汇编语言程序,求出这100个数中的最大数,并将结果存放到MAX单元。
解决方案
- DSEG SEGMENT
- n EQU 100H
- M DW n DUP (?)
- DATA DW ? ;M+2n单元
- ADDR DW ? ;M+2(n+1)单元
- DSEG ENDS
- CSEG SEGMENT
- MAIN PROC FAR
- ASSUME CS: CSEG, DS: DSEG
- START: PUSH DS ;设置返回DOS
- SUB AX, AX
- PUSH AX
- MOV AX, DSEG
- MOV DS, AX ;给DS赋值
- BEGIN: MOV CX, n ;循环计数器
- LEA DI, M
- MOV AX, [DI] ;取第一个数
- MOV ADDR, DI ;记下绝对值最大的数的地址
- CMP AX, 0 ;此数是正数吗?
- JNS ZHEN ;是正数,即为绝对值,转去判断下一个数
- NEG AX ;不是正数,变为其绝对值
- ZHEN: MOV BX, [DI]
- CMP BX, 0 ;此数是正数吗?
- JNS COMP ;是正数,即为绝对值,转去比较绝对值大小
- NEG BX ;不是正数,变为其绝对值
- COMP: CMP AX, BX ;判断绝对值大小
- JAE ADDRESS
- MOV AX, BX ;(AX)<(BX),使(AX)中为绝对值最大的数
- MOV ADDR, DI ;记下绝对值最大的数的地址
- ADDRESS: ADD DI, 2
- LOOP ZHEN
- MOV DATA, AX ;记下此数
- RET
- MAIN ENDP
- CSEG ENDS ;以上定义代码段
- END START
复制代码 |
|