|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 肖-肖 于 2021-5-25 15:37 编辑
题目是:
实现:在270H开始的内存单元中存放了16个8位带符号数,找出其中最大和最小的数分别存入以280H和282H为首地址的内存单元
我的代码是:DATAS SEGMENT
;此处输入数据段代码
org 0270H
n db 81H,70H,82H,76H,84H,74H,83H,78H,88H,71H,85H,73H,75H,86H,76H,87H
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov si,0270H
mov al,[si]
mov bl,al
mov cl,0FH
ks:inc si
dec cl
jz over
cmp al,[si]
JLE next
mov al,[si]
next:cmp bl,[si]
JG ks
mov bl,[si]
jmp ks
over:mov si,0280H
mov [si],bl
add si,2
mov [si],al
MOV AH,4CH
INT 21H
CODES ENDS
END START
我运行出来的结果是:
我觉得如果看成是带符号数得话,88H不才是最小的那个负数吗? 我哪里不对?请指点一下,详细点(最好给个代码),我比较笨,谢谢了
79 是最大,79 + 1 = 80
80 是最小
80 < 88
你的数据里面没有 80,最小是 81
没有 79,最大是 78
另一个问题,边界错误
试试这个代码,最后一个数据是 80,最小 DATAS SEGMENT
;此处输入数据段代码
org 0270H
n db 81H,70H,82H,76H,84H,74H,83H,78H,88H,71H,85H,73H,75H,86H,76H,80H
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov si,0270H
mov al,[si]
mov bl,al
mov cl,0FH
;mov cl,10H
ks: inc si
dec cl
jz over
cmp al,[si]
JLE next
mov al,[si]
next:cmp bl,[si]
JG ks
mov bl,[si]
jmp ks
over:mov si,0280H
mov [si],bl
add si,2
mov [si],al
MOV AH,4CH
INT 21H
CODES ENDS
END START
|
|