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