您的位置 首页 主动

]“hello world”字符串输出的简略汇编

helloworld这个程序是每们语言入门级新手的必经之路,下面就其汇编形式给出简短的源代码和粗略注释。关于21号中断的作用可自行网上查阅。

hello world这个程序是每们言语入门级新手的必经之路,下面就其汇编方式给出简略的源代码

和大略注释。关于21号中止的效果可自行网上查阅。期望能给同学们带来协助。

;效果:hello world! 字符串的输出

;寄存器相关:代码段code与代码段寄存器CS相关,
;数据段data与数据段寄存器DS相关。
assume CS:code,DS:data;留意:assume是伪指令,在扫描编译时不翻译

;data数据段界说
data segment
string db Hello world!,$;切忌串完毕符$
data ends

;代码段界说
code segment

;程序开端
start:
mov ax,data ;将数据段段地址装入AX寄存器
mov ds,ax;将数据段段地址经过通用寄存器AX装入DS
mov dx,offset string;将串的段内地址装入DX
mov ah,09h;调用DOS的09H号功用,传入参数DS:DX=串地址,$完毕字符串

int 21h
mov ah,4ch;调用DOS的4CH号功用,带回来码完毕,回来码存在于AL
int 21h
code ends;代码段界说完毕
end start;程序完毕

hello world的反汇编剖析:

反汇编成果如下:

-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

由反汇编代码能够知道,数据段的段地址由OS分配得到0C31,送入AX

代码端段地址为0C32,由CS锁存。

仓库段地址与数据段地址相同,可是SP和IP有相同的起始值,所以可能会引来一些问题。

持续单步:

-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的值现已送入DS。能够看出,一般段内地址起始值都为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

引发21号中止,程序跳转

下面的都是一些中止功用,介于同学们还没有学习到,所以反汇编暂时剖析到这儿。

最终看一下内存的贮存状况:

-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.

能够看出,咱们的程序是成功的。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/ziliao/zhudong/259412.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部