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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 4570|回復(fù): 4
打印 上一主題 下一主題
收起左側(cè)

基于8086的計(jì)算器匯編程序與Proteus仿真圖

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)




8086匯編語言源程序如下:
  1.         DATA  SEGMENT
  2.            X  DB        ?,?,?,?     ;存放數(shù)據(jù)的每一位
  3.           X1  DW        ?           ;存放第一個(gè)數(shù)據(jù)值
  4.           X2  DW        ?           ;存放第二個(gè)數(shù)據(jù)值
  5.            Y  DW        ?           ;存放運(yùn)算結(jié)果
  6.            S  DB        ?           ;存放運(yùn)算符號(hào)值
  7.            E  DB        ?           ;按下等號(hào)鍵標(biāo)記
  8.           CC  DB        ?           ;存放運(yùn)算數(shù)據(jù)位數(shù)
  9.            H  DB        0           ;存放按鍵行號(hào)
  10.            L  DB        0           ;存放按鍵列號(hào)
  11.      DISCODE  DB        3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H,71H         ;段碼表
  12.         DATA  ENDS

  13.         CODE  SEGMENT
  14.               ASSUME    CS:CODE,DS:DATA

  15.       START:  MOV       AX,DATA
  16.               MOV       DS,AX

  17.               MOV       AL,90H      ;設(shè)置為A口輸入,B口輸出,C口輸出
  18.               OUT       46H,AL
  19.               MOV       DI,OFFSET X+3           ;DI指向X的高位
  20.         KKK:  CALL      KEY         ;掃描按鍵
  21.               JMP       KKK

  22. ;以下為按鍵掃描子程序,程序返回后,在變量H和L中存放當(dāng)前按鍵的行列號(hào)
  23.          KEY  PROC
  24.       CHECK:  CALL      DISP        ;等待按鍵按下的同時(shí)進(jìn)行顯示
  25.               MOV       AL,0F0H     ;所有行輸出低電平
  26.               OUT       44H,AL
  27.               IN        AL,40H
  28.               CMP       AL,0FFH     ;讀列值
  29.               JZ        CHECK       ;若都為高電平則無鍵按下,等待
  30.               MOV       CX,50
  31.               LOOP      $           ;延時(shí)消抖
  32.               IN        AL,DX       ;重讀列值
  33.               CMP       AL,0FFH
  34.               JZ        CHECK       ;無鍵按下一直等待

  35.               MOV       H,0         ;有鍵按下,先把行列號(hào)變量清0
  36.               MOV       L,0
  37.               MOV       BL,01H
  38.               MOV       BH,0FEH     ;掃描法讀鍵值:從第一行開始測(cè)試,即PC0輸出低電平
  39.        NEXT:  MOV       AL,BH
  40.               OUT       44H,AL
  41.       NEXTH:  IN        AL,40H      ;讀列值,判斷是第幾列有鍵按下
  42.               TEST      AL,BL       ;從第一列開始判斷
  43.               JZ        WAIT0
  44.               ROL       BL,1
  45.               CMP       BL,10H      ;當(dāng)前行狀態(tài)下沒有任何列有鍵按下,則轉(zhuǎn)為對(duì)下一行的測(cè)試
  46.               JZ        NEXTL
  47.               INC       H           ;每判斷一列,列號(hào)加1
  48.               JMP       NEXTH       ;再對(duì)下一列進(jìn)行判斷
  49.       NEXTL:  MOV       H,0
  50.               MOV       BL,01H
  51.               ROL       BH,1        ;對(duì)下一行測(cè)試,讓下一個(gè)PC口輸出低電平
  52.               CMP       BH,0EFH
  53.               JZ        EXIT
  54.               INC       L
  55.               JMP       NEXT

  56.       WAIT0:  IN        AL,40H      ;若有鍵按下,則等該按鍵松開后再計(jì)算鍵值
  57.               CMP       AL,0FFH
  58.               JNZ       WAIT0
  59.               MOV       CX,50
  60.               LOOP      $           ;延時(shí)消抖
  61.               IN        AL,40H
  62.               CMP       AL,0FFH
  63.               JNZ       WAIT0
  64.               CALL      KEYVALUE    ;調(diào)計(jì)算鍵值子程序
  65.        EXIT:  RET
  66.          KEY  ENDP


  67.    ;以下為計(jì)算鍵值子程序,通過行列號(hào)計(jì)算鍵值(鍵值=列號(hào)*4+行號(hào))
  68.    ;鍵值存放在DL寄存器中
  69.     KEYVALUE  PROC
  70.               MOV       DL,L
  71.               MOV       DH,H
  72.               SHL       DL,1
  73.               SHL       DL,1        ;列號(hào)乘4
  74.               ADD       DL,DH
  75.               CMP       DL,9        ;按下的是數(shù)字鍵
  76.               JNG       NUM_CALL
  77.               CMP       DL,14
  78.               JL        CONT_CALL   ;按下的是運(yùn)算鍵
  79.               CMP       DL,14
  80.               JZ        OUTP_CALL   ;按下的是等于鍵
  81.               CMP       DL,15
  82.               JZ        CLR_CALL    ;按下的是清除鍵

  83.    NUM_CALL:  CALL      NUMBER      ;調(diào)數(shù)字鍵處理子程序
  84.               JMP       EXIT1
  85.   CONT_CALL:  MOV       S,DL        ;存放運(yùn)算鍵的鍵值
  86.               MOV       E,0
  87.               CALL      COUNT       ;調(diào)運(yùn)算鍵處理子程序,計(jì)算第一個(gè)加數(shù)
  88.               JMP       EXIT1
  89.   OUTP_CALL:  CALL      OUTP        ;調(diào)等號(hào)鍵處理子程序
  90.               JMP       EXIT1
  91.    CLR_CALL:  CALL      CLEAR       ;調(diào)清除鍵處理子程序
  92.       EXIT1:  RET
  93.     KEYVALUE  ENDP


  94. ;以下為清除鍵處理子程序,按下清除鍵后,X變量全部清0
  95.        CLEAR  PROC
  96.               MOV       X[3],0
  97.               MOV       X[2],0
  98.               MOV       X[1],0
  99.               MOV       X[0],0
  100.               CALL      BITP
  101.               RET
  102.        CLEAR  ENDP


  103. ;以下為等號(hào)鍵處理子程序,該子程序負(fù)責(zé)將第二個(gè)運(yùn)算數(shù)據(jù)的數(shù)值計(jì)算出來存入X2變量
  104. ;并根據(jù)運(yùn)算符號(hào),調(diào)用相應(yīng)的運(yùn)算子程序
  105.         OUTP  PROC
  106.               PUSH      AX
  107.               PUSH      DX
  108.               PUSH      BX
  109.               INC       E
  110.               CALL      COUNT       ;調(diào)運(yùn)算鍵處理子程序,計(jì)算第二個(gè)運(yùn)算數(shù)據(jù)
  111.               CMP       S,10
  112.               JZ        ADD_CALL    ;運(yùn)算符為加號(hào),則調(diào)用加法子程序
  113.               CMP       S,11
  114.               JZ        SUB_CALL    ;運(yùn)算符為減號(hào),則調(diào)用減法子程序
  115.               CMP       S,12
  116.               JZ        MUL_CALL    ;運(yùn)算符為乘號(hào),則調(diào)用乘法子程序
  117.               CMP       S,13
  118.               CALL      DIVP        ;運(yùn)算符為除號(hào),則調(diào)用除法子程序
  119.               JMP       STORE1
  120.    ADD_CALL:  CALL      ADDP
  121.               JMP       STORE1
  122.    SUB_CALL:  CALL      SUBP
  123.               JMP       STORE1
  124.    MUL_CALL:  CALL      MULP

  125.      STORE1:  MOV       AX,Y        ;以下程序?qū)⒏鬟\(yùn)算子程序返回的運(yùn)算結(jié)果,按位分解,送入X變量
  126.               MOV       DX,0
  127.               MOV       BX,1000
  128.               DIV       BX
  129.               MOV       X[0], AL
  130.               MOV       AX,DX
  131.               MOV       BL,100
  132.               DIV       BL
  133.               MOV       X[1],AL
  134.               MOV       AL,AH
  135.               MOV       AH,0
  136.               MOV       BL,10
  137.               DIV       BL
  138.               MOV       X[2],AL
  139.               MOV       X[3],AH
  140.               POP       BX
  141.               POP       DX
  142.               POP       AX
  143.               RET
  144.         OUTP  ENDP

  145. ;以下為運(yùn)算鍵處理子程序,該程序?qū)⒌谝粋(gè)運(yùn)算數(shù)據(jù)的數(shù)值計(jì)算出來并存入X1變量
  146. ;或者將第二個(gè)運(yùn)算數(shù)據(jù)的數(shù)值計(jì)算出來并存入X2變量
  147. ;將運(yùn)算符的值存入S變量
  148.        COUNT  PROC
  149.               PUSH      AX
  150.               PUSH      BX
  151.               PUSH      DX
  152.               MOV       DX,0
  153.               CALL      BITP        ;測(cè)試X中的數(shù)據(jù)是多少位
  154.               CMP       CC,4        ;輸入的數(shù)據(jù)是4位數(shù) ?
  155.               JZ        C4
  156.               CMP       CC,3        ;輸入的數(shù)據(jù)是3位數(shù) ?
  157.               JZ        C3
  158.               CMP       CC,2        ;輸入的數(shù)據(jù)是2位數(shù) ?
  159.               JZ        C2
  160.               JMP       C1          ;輸入的數(shù)據(jù)是1位數(shù) ?

  161.          C4:  MOV       AX,0
  162.               MOV       AL,X[0]
  163.               MOV       BX,1000
  164.               MUL       BX
  165.               MOV       DX,AX

  166.          C3:  MOV       AL,X[1]
  167.               MOV       BL,100
  168.               MUL       BL
  169.               ADD       DX,AX

  170.          C2:  MOV       AL,X[2]
  171.               MOV       BL,10
  172.               MUL       BL
  173.               ADD       DX,AX

  174.          C1:  MOV       AL,X[3]
  175.               MOV       AH,0
  176.               ADD       DX,AX
  177.               CMP       E,1
  178.               JNZ       X1_S
  179.               MOV       X2,DX       ;按下的是等號(hào),則將第二個(gè)運(yùn)算數(shù)據(jù)的值存入X2變量
  180.               JMP       EXIT3
  181.        X1_S:  MOV       X1,DX       ;按下的是運(yùn)算符號(hào),則將第一個(gè)運(yùn)算數(shù)據(jù)的值存X1變量
  182.               MOV       X[3],0      ;清空X變量
  183.               MOV       X[2],0
  184.               MOV       X[1],0
  185.               MOV       X[0],0
  186.       EXIT3:  POP       DX
  187.               POP       BX
  188.               POP       AX
  189.               RET
  190.        COUNT  ENDP


  191. ;以下為數(shù)字鍵處理子程序
  192. ;該程序,將輸入的數(shù)據(jù)按位存放在X變量中,并由CC記錄數(shù)據(jù)的位數(shù)
  193.       NUMBER  PROC
  194.               CMP       E,1
  195.               JNZ       CONTINUE
  196.               MOV       E,0
  197.               CALL      CLEAR
  198.    CONTINUE:  CMP       CC,0        ;目前數(shù)據(jù)為0位,即沒有數(shù)據(jù),則轉(zhuǎn)到SSS
  199.               JZ        SSS
  200. ;若已有數(shù)據(jù),以下程序?qū)左移8位。
  201. ;例如:先輸入“1”,當(dāng)再輸入2時(shí),
  202. ;先要將“1”從個(gè)位移到十位,然后再將“2”存放到個(gè)位
  203.               PUSH      AX
  204.               PUSH      DX
  205.               MOV       AL,X[3]
  206.               MOV       AH,X[2]
  207.               MOV       DL,X[1]
  208.               MOV       DH,X[0]
  209.               MOV       CX,8
  210.          LL:  SHL       AX, 1
  211.               RCL       DX,1
  212.               LOOP      LL
  213.               MOV       X[3],AL
  214.               MOV       X[2],AH
  215.               MOV       X[1],DL
  216.               MOV       X[0],DH
  217.               POP       DX
  218.               POP       AX
  219.         SSS:  MOV       [DI],DL     ;將當(dāng)前鍵入的數(shù)據(jù)存放到X的最低位
  220.               INC       CC          ;數(shù)據(jù)位數(shù)加1
  221.               CMP       CC,4        ;判斷數(shù)據(jù)位數(shù)
  222.               JNG       EXIT2
  223.               MOV       CC,0        ;如果數(shù)據(jù)超過4位,重新從最低位開始存放
  224.               MOV       X[2],0
  225.               MOV       X[1],0
  226.               MOV       X[0],0
  227.       EXIT2:  CALL      DISP        ;調(diào)顯示子程序,顯示輸入的數(shù)據(jù)
  228.               RET
  229.       NUMBER  ENDP

  230. ;加法子程序
  231.         ADDP  PROC
  232.               PUSH      AX
  233.               MOV       AX,X1
  234.               ADD       AX,X2
  235.               MOV       Y,AX
  236.               POP       AX
  237.               RET
  238.         ADDP  ENDP
  239. ;減法子程序
  240.         SUBP  PROC
  241.               PUSH      AX
  242.               MOV       AX,X1
  243.               SUB       AX,X2
  244.               MOV       Y,AX
  245.               POP       AX
  246.               RET
  247.         SUBP  ENDP
  248. ;乘法子程序
  249.         MULP  PROC
  250.               PUSH      AX
  251.               PUSH      DX
  252.               MOV       AX,X1
  253.               MOV       DX,X2
  254.               MUL       DX
  255.               MOV       Y,AX
  256.               POP       DX
  257.               POP       AX
  258.               RET
  259.         MULP  ENDP
  260. ;除法子程序
  261.         DIVP  PROC
  262.               PUSH      AX
  263.               PUSH      BX
  264.               PUSH      DX
  265.               MOV       DX,0
  266.               MOV       AX,X1
  267.               MOV       BX,X2
  268.               DIV       BX
  269.               MOV       Y,AX
  270.               POP       DX
  271.               POP       BX
  272.               POP       AX
  273.               RET
  274.         DIVP  ENDP

  275. ;顯示子程序 ,將X中的數(shù)值按位顯示出來
  276.         DISP  PROC
  277.               PUSH      BX
  278.               PUSH      AX
  279.               MOV       BH,0
  280.               LEA       SI,DISCODE
  281.               CALL      BITP        ;測(cè)試X位數(shù)
  282.               CMP       CC,4
  283.               JZ        QIAN
  284.               CMP       CC,3
  285.               JZ        BAI
  286.               CMP       CC,2
  287.               JZ        SHI
  288.               CMP       CC,1
  289.               JMP       G
  290.               JMP       NONE

  291.        QIAN:  MOV       AH,11100000B            ;從第4位開始顯示
  292.               MOV       AL,AH
  293.               OUT       44H,AL
  294.               MOV       BL,X[0]
  295.               MOV       AL,[SI+BX]
  296.               OUT       42H,AL
  297.               CALL      DELY
  298.               MOV       AL,0
  299.               OUT       42H,AL

  300.         BAI:  MOV       AH,11010000B            ;從第3位開始顯示
  301.               MOV       AL,AH
  302.               OUT       44H,AL
  303.               MOV       BL,X[1]
  304.               MOV       AL,[SI+BX]
  305.               OUT       42H,AL
  306.               CALL      DELY
  307.               MOV       AL,0
  308.               OUT       42H,AL

  309.         SHI:  MOV       AH,10110000B            ;從第2位開始顯示
  310.               MOV       AL,AH
  311.               OUT       44H,AL
  312.               MOV       BL,X[2]
  313.               MOV       AL,[SI+BX]
  314.               OUT       42H,AL
  315.               CALL      DELY
  316.               MOV       AL,0
  317.               OUT       42H,AL

  318.           G:  MOV       AH,01110000B            ;從第1位開始顯示
  319.               MOV       AL,AH
  320.               OUT       44H,AL
  321.               MOV       BL,X[3]
  322.               MOV       AL,[SI+BX]
  323.               OUT       42H,AL
  324.               CALL      DELY
  325.               JMP       EXIT4
  326. ……………………

  327. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
代碼與Proteus仿真下載:
計(jì)算器8086.7z (45.45 KB, 下載次數(shù): 109)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂2 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:1054685 發(fā)表于 2022-12-20 16:08 來自手機(jī) | 只看該作者
沒代碼
回復(fù)

使用道具 舉報(bào)

板凳
ID:1054685 發(fā)表于 2022-12-20 16:49 來自手機(jī) | 只看該作者
誤會(huì)了,我傻了
回復(fù)

使用道具 舉報(bào)

地板
ID:1073250 發(fā)表于 2023-5-27 18:03 | 只看該作者
這個(gè)計(jì)算器還是不錯(cuò)的,我下載下來學(xué)習(xí)了
回復(fù)

使用道具 舉報(bào)

5#
ID:1101994 發(fā)表于 2023-12-1 11:06 | 只看該作者
鬼鬼YYDS 發(fā)表于 2023-5-27 18:03
這個(gè)計(jì)算器還是不錯(cuò)的,我下載下來學(xué)習(xí)了

可以分享下嘛
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: av电影一区二区 | 日本激情一区二区 | 亚洲精品欧美 | av手机在线播放 | 91精品国产综合久久久亚洲 | 中文字幕亚洲精品在线观看 | 国产精品一区二区三区在线播放 | 色综合久久天天综合网 | 国产精品成人在线观看 | 亚洲综合网站 | 国产精品美女www | 中文字幕av一区二区三区 | 在线免费观看a级片 | 中文字幕精品一区久久久久 | 国产精品一区二区免费 | 成人九色 | 亚洲一区二区三区免费观看 | 97久久久| 久草新在线 | 午夜天堂精品久久久久 | 国产精品成人一区二区 | 欧美精品tv | 欧美片网站免费 | 国产精品免费福利 | 国产欧美在线 | 中文字幕一区在线观看视频 | 成年人网站在线观看视频 | 亚洲一级av毛片 | 日中文字幕在线 | 欧美一区二区三区在线观看 | 国产一区二区三区 | 色播99 | 久久婷婷麻豆国产91天堂 | 国产资源一区二区三区 | 精品国产18久久久久久二百 | 精品国产色 | 91在线一区二区三区 | 欧美精品一区在线 | 国产农村妇女精品一区 | 精品视频一区二区三区 | 最近中文字幕第一页 |