久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3850|回復: 0
收起左側

emu8086排序源程序

[復制鏈接]
ID:268365 發表于 2017-12-28 15:01 | 顯示全部樓層 |閱讀模式
在數據區存放有一個數據序列(字型還是字節型的自行確定),編寫程序,該程序應該能完成以下功能:

1、(選做)數據區的數據由鍵盤錄入;

2、程序可以按有符號數由大到小,由小到大,按無符號數由大到小,由小到大排序,編寫為多分支程序,由鍵入不同字符或數字選擇排序方法;

3、排序方法自定,可以用不同的方法排序;

4、完成排序后的數據區顯示在電腦屏幕上;

5、盡可能用調用子程序的方法來實現程序,主程序與子程序參數的傳遞方法自行確定。
  1. data segment
  2.     data1 db -78,24,-8,94,-109,128,0
  3.     count equ $-data1  
  4.     HINT   DB  'wrong
  5. [/color][/font][/align]

  6. data ends
  7. code segment
  8.     assume cs:code,ds:data
  9. main proc near
  10. start:mov ax,data
  11.       mov ds,ax
  12.       mov ah,1
  13. input:  int 21h                     ;輸入一個數
  14.       cmp al,31h
  15.       jz next                    ;輸入數等于1調用有符數大到小排序
  16.       cmp al,32h
  17.       jz next1                    ;輸入數等于2調用有符數小到大排序
  18.       cmp al,33h
  19.       jz next2                    ;輸入數等于3調用無符數大到小排序
  20.       cmp al,34h
  21.       jz next3                    ;輸入數等于4調用無符數小到大排序
  22.       jmp WRONG                  ;輸入其他值時提示錯誤
  23.       
  24.        WRONG: MOV   DL,0DH             ;回車
  25.         MOV   AH,02H
  26.         INT   21H
  27.         MOV   DL,0AH             ;換行
  28.         MOV   AH,02H
  29.         INT   21H
  30.         MOV   DX,OFFSET HINT   ;提示‘wrong’
  31.         MOV   AH,09H
  32.         INT   21H
  33.         MOV   AH,4CH
  34.         INT   21H   
  35.         HLT                  ;主程序結束  
  36.          
  37. next:call signe_ltos
  38.       jmp play
  39. next1:call signe_stol
  40.       jmp play
  41. next2:call unsigne_ltos
  42.       jmp play
  43. next3:call unsigne_stol
  44. play:call display
  45.       mov ax,4c00h
  46.       int 21h
  47. main endp

  48. signe_ltos proc near                   ;有符號數從大到小
  49.       mov cx,count
  50.       dec cx
  51. loop1:lea si,data1
  52.       mov di,cx
  53. loop2:mov al,data1[si]
  54.       cmp al,data1[si+1]
  55.       jge ltos                       ;大于等于跳轉
  56.       xchg al,data1[si+1]
  57.       mov data1[si],al      
  58. ltos:inc si
  59.       loop loop2
  60.       mov cx,di
  61.       loop loop1
  62.        ret
  63. signe_ltos endp

  64. signe_stol proc near                    ;有符號數從小到大
  65.       mov cx,count
  66.       dec cx
  67. loop3:lea si,data1
  68.       mov di,cx
  69. loop4:mov al,data1[si]
  70.       cmp al,data1[si+1]
  71.       jle stol                          ;小于等于跳轉
  72.       xchg al,data1[si+1]
  73.       mov data1[si],al      
  74. stol:inc si
  75.       loop loop4
  76.       mov cx,di
  77.       loop loop3
  78.        ret
  79. signe_stol endp
  80.    
  81. unsigne_ltos proc near                  ;無符號數從大到小
  82.       mov cx,count
  83.       dec cx
  84. loop5:lea si,data1
  85.       mov di,cx
  86. loop6:mov al,data1[si]
  87.       cmp al,data1[si+1]
  88.       jae ultos                        ;大于等于跳轉
  89.       xchg al,data1[si+1]                ;否則交換
  90.       mov data1[si],al      
  91. ultos:inc si
  92.       loop loop6
  93.       mov cx,di
  94.       loop loop5  
  95.         ret
  96. unsigne_ltos endp  

  97. unsigne_stol proc near                    ;無符號數從小到大
  98.       mov cx,count
  99.       dec cx
  100. loop7:lea si,data1
  101.       mov di,cx
  102. loop8:mov al,data1[si]
  103.       cmp al,data1[si+1]
  104.       jbe ustol                          ;小于等于跳轉
  105.       xchg al,data1[si+1]                  ;否則交換
  106.       mov data1[si],al      
  107. ustol:inc si
  108.       loop loop8
  109.       mov cx,di
  110.       loop loop7  
  111.         ret
  112. unsigne_stol endp
  113.    
  114. display proc near
  115.          mov cx,count                   ;數組個數給cx
  116.          mov dl,13
  117.          call out_chr                      ;回車換行
  118.          mov dl,10
  119.          call out_chr
  120.          lea si,data1                     ;si指向data1的首地址
  121. loop9:  mov al,data1[si]                  ;data1的值給al
  122.          call dis                        ;十進制顯示al的值
  123.          mov dl,' '
  124.          call out_chr                    ;調用int 21h顯示功能
  125.          inc si                         ;si值加1,指向data1的下個數
  126.          loop loop9                    ;循環
  127.          ret
  128. display endp

  129. dis proc near
  130.          pusha                        ;保護現場,所有寄存器的數存下
  131.          mov bh,al                 ;al值給bh
  132.          cmp al,128      ;大于等于128為負數,8位寄存器有符號數范圍-128∽127
  133.          jb next4                    ;小于128跳轉         
  134.          mov dl,'-'                        ;顯示負號
  135.          call out_chr
  136.          mov al,bh                  ;上面操作時,al的值會變,現在將數組的值再給al
  137.          neg al                   ;al進行補碼操作,相當于對負數al取絕對值
  138. next4:mov ah,0
  139.          mov bl,100
  140.          div bl              ;div除法,默認被除數為al,除數bl,商存在al,余數存ah
  141.          mov bh,al                  ;百位數字給bh
  142.          mov ch,ah                   ;余數給ch,以下操作會覆蓋ah
  143.          cmp al,0                   ;看百位是不是0
  144.          jz next5                    ;百位為0不顯示
  145.          add al,30h                   ;百位數字轉成十進制
  146.          mov dl,al      
  147.          call out_chr
  148. next5:  mov ah,0
  149.          mov al,ch                   ;存在ch的余數,小于100的數字給al
  150.          mov bl,10
  151.          div bl
  152.          mov cx,ax                       ;商和余數給cx
  153.          cmp al,0                          ;十位數字是否為0
  154.          jz next7                          ;為0跳轉
  155.   next6: add cl,30h                       ;十位數字轉十進制
  156.          mov dl,cl
  157.          call out_chr
  158.          jmp next8
  159. next7:  cmp bh,0                        ;判斷百位是否為0,確定十位是否需要顯示
  160.          ja next6                         ;百位不為0,顯示十位數字
  161. next8:  add ch,30h                       ;個位數字十進制
  162.          mov dl,ch
  163.          call out_chr
  164.          popa                 ;恢復現場,將子程序開始時存下的寄存器的數全部恢復
  165.          ret
  166. dis endp

  167. out_chr:
  168.     push ax
  169.     mov ah,2                 ;dos調用
  170.     int 21h
  171.     pop ax
  172.     ret
  173. code ends
  174. end start
復制代碼
全部資料51hei下載地址:
LQ2.rar (1.6 KB, 下載次數: 7)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩高清中文字幕 | 欧美精品一二三区 | 中文字幕一二三区 | 国产成人精品免高潮在线观看 | 日韩成人一区二区 | 亚洲欧美日韩在线不卡 | 97伦理影院 | 欧美日韩在线观看视频网站 | 欧美日韩中文字幕在线播放 | 中文字幕成人在线 | 欧美中文字幕一区二区 | 国产精品福利在线观看 | 91色综合| 最新中文字幕在线 | 中文字幕av在线 | 有码在线 | 日本成人中文字幕 | 国产精品久久一区二区三区 | 影音先锋中文在线 | 久久精品久久久久久 | 99九色| 精品久久久久久久久久久 | 亚洲二区在线 | 欧美a在线| 日日夜夜天天久久 | 成人在线中文字幕 | 91xxx在线观看 | 国产香蕉视频在线播放 | 亚洲欧美另类在线 | 欧美高清一区 | 久久精品国产一区 | 一区中文 | 国产精品一区在线 | 涩爱av一区二区三区 | 酒色成人网 | 中文字幕亚洲一区 | 国产成人精品一区二区三区在线观看 | 欧美国产日韩一区 | 91精品国产91久久久久久最新 | 免费在线色 | 黄色精品 |