匯編語言--輸入兩位十六進制數,輸出其十進制值

      網友投稿 1177 2022-05-29

      輸入兩位十六進制數,輸出其十進制值

      題目:

      輸入:ff

      輸出:255

      輸入:12

      輸出:018

      (默認字符為小寫)

      方法一

      代碼

      stack segment stack ends data segment string_1 db 'please input a num: $' string_2 db 0ah,0dh,'the result is : $' result db 0,0,0 ;3個0分別用來存儲轉換10進制后的值 因為最大為255 所以有三位 data ends code segment assume cs:code,ds:data,ss:stack start: mov ax,data mov ds,ax ;顯示提示語句 lea dx,string_1 mov ah,09h int 21h ;從鍵盤上讀第一個字符 mov ah,01h int 21h ;先減去30h 再判斷是數字 還是a~f sub al,30h cmp al,10 jb shuzi ;是數字 跳轉 ;是字母a~f 則還要再減去27h sub al,27h mov cl,4 shl al,cl ;左移4位,相當于乘以16 mov bl,al jmp in_2 shuzi: mov cl,4 shl al,cl mov bl,al ;輸入第二個字符 in_2: mov ah,01h int 21h sub al,30h cmp al,10 jb shuzi_2 sub al,27h add bl,al jmp change shuzi_2: add bl,al ;開始進制轉換 change: mov bh,0 mov ax,bx mov bx,offset result+2 mov cx,3 mov si,10 ;轉換方法就是 循環除以10 得到每個位置的數 ;比如255 255%10=5 25%5=5 2%5=2 這樣就把255分成了2 5 5 了 do: div si mov [bx],dl mov dx,0 ;因為除以的是si 16位的,所以被除數為32位,就是高16位為dx,低16位為ax,但dx會用來存余數,所以需要及時對dx清零 dec bx mov ah,0 loop do ;顯示結束語句 lea dx,string_2 mov ah,09h int 21h mov bx,offset result mov cx,3 shuchu: mov dl,[bx] add dl,30h mov ah,02h int 21h inc bx loop shuchu mov ax,4c00h int 21h code ends end start

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      結果

      改進版

      stack segment db 10 dup(?) stack ends data segment string_1 db 'please input a num: $' string_2 db 0ah,0dh,'the result is: $' result db 0,0,0 data ends code segment assume cs:code,ss:stack,ds:data start: mov ax,data mov ds,ax lea dx,string_1 mov ah,09h int 21h mov cx,2 xor bl,bl input: push cx mov cl,4 mov ah,01h int 21h shl bl,cl sub al,30h cmp al,10 jb shuzi sub al,27h shuzi: add bl,al pop cx loop input mov bh,0 mov ax,bx mov bl,10 mov cx,3 mov si,offset result+2 change: div bl mov [si],ah dec si mov ah,0 loop change lea dx,string_2 mov ah,09h int 21h mov cx,3 mov si,offset result output: mov dl,[si] add dl,30h mov ah,02h int 21h inc si loop output mov ax,4c00h int 21h code ends end start

      匯編語言--輸入兩位十六進制數,輸出其十進制值

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      方法二:

      DATAS SEGMENT bin dw 10 dup(?) ;存放二進制結果 buf db 5 dup(?) ;存放十進制數 各個數位上的數值 如100,存放為 1,0,0 msg1 db 'please input a hex number',13,10,'$' msg2 db 'the dec number:',13,10,'$' crlf db 13,10,'$' ;回車換行 DATAS ENDS stack segment db 10 dup(?) stack ends CODES SEGMENT ASSUME CS:CODES,DS:DATAS mov cx,2 START: push cx MOV AX,DATAS MOV DS,AX mov bx,0 ;初始化bx LEA dx,msg1 ;輸出提示字符串 mov ah,9 int 21h input: mov ah,1 ;輸入一個字符 int 21h sub al,30h ;把al中的ascii碼轉換成數值 jl init cmp al,10 ;輸入的數在0-9之間跳轉 jl toBin sub al,27h ;再轉換為a-f cmp al,0ah ;輸入的字符比a小 jl init ;結束輸入 cmp al,10h ;輸入的字符比f大 jge init ;結束輸入 toBin: ;轉換為二進制,把輸入組合成意義上的數值 mov cl,4 shl bx,cl ;bx左移4位 mov ah,0 add bx,ax ;把輸入后并從ascii碼轉換來的值與bx相加 mov bin,bx ;轉換成二進制數后存到內存bin jmp input ;繼續輸入 init: ;初始化,準備轉換 mov ax,bin mov bx,10 mov si,4 ;循環四次,最大到萬位 toDec: ;轉為各個數位上的數值,如100轉換為1,0,0 百位為1... mov dx,0 div bx ;除10法得到各個位上的數值 mov [buf+si],dl ;余數為該位上的值,第一次循環為個位,第二次為十位...;存到內存中 dec si cmp ax,0 ;商是否為0,為0算法結束 ja toDec lea dx,crlf ;顯示提示 mov ah,9 int 21h lea dx,msg2 mov ah,9 int 21h output: ;輸出內存中存放的各個數位上的數值 inc si mov dl,[buf+si] add dl,30h ;轉為ascii mov ah,2 int 21h cmp si,4 jb output mov cx,0 pop cx loop START MOV AH,4CH INT 21H CODES ENDS END START

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      總結

      計算機存儲數據其實是以二進制數存儲的,但是在debug模式下,我們看到的數都是以十六進制顯示。

      鍵盤輸入其實存儲的是對應的ASCII值,比如輸入:f 其實存的是:66h

      為了使輸入:f 計算機存儲的也是f,需要-57h 如果是數字的話,需要 -30h

      這里是兩位十六進制的數,輸入一個字符后,在最后計算結果的時候,其實是第一個字符乘以16再加上第二個字符,在計算機中,乘以十六,相當于左移四位。所以在這里我的方法是:獲得第一個字符后,左移四位,在與第二個字符進行相加。得到的就是我們需要的。

      輸出也是需要ASCII值,記得+30h

      div的用法需要搞清楚

      匯編語言

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:程序員歌曲推薦
      下一篇:容器鏡像的構建和調試指南
      相關文章
      日韩精品电影一区亚洲| 亚洲av成人一区二区三区在线观看| 亚洲AV中文无码字幕色三| 亚洲精品视频在线| 亚洲日韩精品无码专区网址| 国产亚洲精品美女久久久久| 亚洲区小说区图片区| 97久久国产亚洲精品超碰热| 亚洲youwu永久无码精品| 亚洲第一区精品观看| 亚洲国产精品高清久久久| 亚洲欧洲精品一区二区三区| 亚洲老熟女五十路老熟女bbw| 亚洲国产成人精品无码区花野真一 | 色偷偷亚洲男人天堂| 亚洲日韩中文字幕在线播放| 亚洲av午夜福利精品一区人妖| 亚洲中文字幕久在线| 国产精品亚洲精品日韩电影| 亚洲AV无码久久精品蜜桃| 亚洲一区电影在线观看| 亚洲A∨精品一区二区三区| 亚洲午夜久久久久久久久电影网| 久久亚洲中文字幕精品有坂深雪 | 亚洲婷婷天堂在线综合| 中国china体内裑精亚洲日本| 亚洲精品无码久久毛片| 亚洲午夜精品久久久久久人妖| 亚洲AV无码无限在线观看不卡| 午夜在线亚洲男人午在线| 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲国产中文字幕在线观看| 久久夜色精品国产亚洲AV动态图| 亚洲中文精品久久久久久不卡| 亚洲中文字幕无码久久2017 | 亚洲五月六月丁香激情| 亚洲欧美日韩一区二区三区在线| 亚洲中文字幕视频国产| 亚洲国产成人精品无码一区二区| 亚洲av中文无码| 亚洲视频在线观看2018|