|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
复制代码
|
|