<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > ]“hello world”字符串輸出的簡(jiǎn)單匯編

          ]“hello world”字符串輸出的簡(jiǎn)單匯編

          作者: 時(shí)間:2016-11-25 來(lái)源:網(wǎng)絡(luò) 收藏
          hello world這個(gè)程序是每們語(yǔ)言入門(mén)級(jí)新手的必經(jīng)之路,下面就其匯編形式給出簡(jiǎn)短的源代碼

          和粗略注釋。關(guān)于21號(hào)中斷的作用可自行網(wǎng)上查閱。希望能給同學(xué)們帶來(lái)幫助。

          本文引用地址:http://www.ex-cimer.com/article/201611/321425.htm

          ;作用:hello world! 字符串的輸出

          ;寄存器關(guān)聯(lián):代碼段code與代碼段寄存器CS關(guān)聯(lián),
          ;數(shù)據(jù)段data與數(shù)據(jù)段寄存器DS關(guān)聯(lián)。
          assume CS:code,DS:data;注意:assume是偽指令,在掃描編譯時(shí)不翻譯

          ;data數(shù)據(jù)段定義
          data segment
          string db Hello world!,$;切忌串結(jié)束符$
          data ends

          ;代碼段定義
          code segment

          ;程序開(kāi)始
          start:
          mov ax,data ;將數(shù)據(jù)段段地址裝入AX寄存器
          mov ds,ax;將數(shù)據(jù)段段地址通過(guò)通用寄存器AX裝入DS
          mov dx,offset string;將串的段內(nèi)地址裝入DX
          mov ah,09h;調(diào)用DOS的09H號(hào)功能,傳入?yún)?shù)DS:DX=串地址,$結(jié)束字符串

          int 21h
          mov ah,4ch;調(diào)用DOS的4CH號(hào)功能,帶返回碼結(jié)束,返回碼存在于AL
          int 21h
          code ends;代碼段定義結(jié)束
          end start;程序結(jié)束

          hello world的反匯編分析:

          反匯編結(jié)果如下:

          -u
          0C32:0000 B8310C MOV AX,0C31
          0C32:0003 8ED8 MOV DS,AX
          0C32:0005 BA0000 MOV DX,0000
          0C32:0008 B409 MOV AH,09
          0C32:000A CD21 INT 21
          0C32:000C B44C MOV AH,4C
          0C32:000E CD21 INT 21
          0C32:0010 0426 ADD AL,26
          0C32:0012 807F0403 CMP BYTE PTR [BX+04],03
          0C32:0016 7507 JNZ 001F
          0C32:0018 26 ES:
          0C32:0019 807F0A00 CMP BYTE PTR [BX+0A],00
          0C32:001D 7437 JZ 0056
          0C32:001F A15827 MOV AX,[2758]

          單步如下:

          -t

          AX=0C31 BX=0000 CX=0020 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
          DS=0C21 ES=0C21 SS=0C31 CS=0C32 IP=0003 NV UP EI PL NZ NA PO NC
          0C32:0003 8ED8 MOV DS,AX

          由反匯編代碼可以知道,數(shù)據(jù)段的段地址由OS分配得到0C31,送入AX

          代碼端段地址為0C32,由CS鎖存。

          堆棧段地址與數(shù)據(jù)段地址一樣,但是SP和IP有相同的起始值,所以可能會(huì)引來(lái)一些問(wèn)題。

          繼續(xù)單步:

          -t

          AX=0C31 BX=0000 CX=0020 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
          DS=0C31 ES=0C21 SS=0C31 CS=0C32 IP=0005 NV UP EI PL NZ NA PO NC
          0C32:0005 BA0000 MOV DX,0000

          AX的值已經(jīng)送入DS。可以看出,一般段內(nèi)地址起始值都為0.

          單步:

          0C32:0005 BA0000 MOV DX,0000
          -t

          AX=0C31 BX=0000 CX=0020 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
          DS=0C31 ES=0C21 SS=0C31 CS=0C32 IP=0008 NV UP EI PL NZ NA PO NC
          0C32:0008 B409 MOV AH,09

          DX的值重新置為0.

          單步:

          AX=0931 BX=0000 CX=0020 DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
          DS=0C31 ES=0C21 SS=0C31 CS=0C32 IP=000A NV UP EI PL NZ NA PO NC
          0C32:000A CD21 INT 21

          09送入AX的高八位

          單步:

          AX=0931 BX=0000 CX=0020 DX=0000 SP=FFFA BP=0000 SI=0000 DI=0000
          DS=0C31 ES=0C21 SS=0C31 CS=00A7 IP=107CNV UP DI PL NZ NA PO NC
          00A7:107C 90 NOP

          引發(fā)21號(hào)中斷,程序跳轉(zhuǎn)

          下面的都是一些中斷功能,介于同學(xué)們還沒(méi)有學(xué)習(xí)到,所以反匯編暫時(shí)分析到這兒。

          最后看一下內(nèi)存的儲(chǔ)存情況:

          -d 0c31:0
          0C31:0000 48 65 6C 6C 6F 20 77 6F-72 6C 64 21 24 00 00 00 Hello world!$...
          0C31:0010 B8 31 0C 8E D8 BA 00 00-B4 09 CD 21 B4 4C CD 21 .1.........!.L.!
          0C31:0020 04 26 80 7F 04 03 75 07-26 80 7F 0A 00 74 37 A1 .&....u.&....t7.
          0C31:0030 58 27 39 06 36 22 72 14-BE 36 22 8B 1C FF 04 2B X9.6"r..6"....+
          0C31:0040 D8 D1 E3 D1 E3 8B 36 04-06 EB 10 90 BE 36 22 8B ......6......6".
          0C31:0050 1C FF 04 D1 E3 D1 E3 8B-36 92 12 8B 46 08 8B 56 ........6...F..V
          0C31:0060 0A 89 00 89 50 02 5E 5D-C3 90 55 8B EC 83 EC 18 ....P.^]..U.....
          0C31:0070 57 56 8B 5E 04 8B 07 8B-57 02 89 46 F8 89 56 FA WV.^....W..F..V.

          可以看出,我們的程序是成功的。




          關(guān)鍵詞: 字符串輸出簡(jiǎn)單匯

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();