汇编版Hello world

在本章,我们将以汇编版的“hello world",为大家介绍在IDE中如何编写,编译,测试和调试汇编程序,以及系统中关于内存寻址的相关理论。

2.1汇编版Hello world

汇编的程序结构主要包含代码段,数据段,堆栈段。下面举一个汇编版的hello world来了解汇编程序的结构构成(在汇编程序中,以“;”开始的语句是注释语句)。

 

;堆栈段

stack segment

db 100 dup(?)

stack ends

 

;数据段

data segment

szHello db 'hello,world',0dh,0ah,'$'

data ends

 

;代码段

code segment

;assumecsdsss段寄存器分别与codedatastack段对应

assume cs:code,ds:data,ss:stack

 

;程序开始执行

start:

mov ax,data

mov ds,ax

 

mov ah,9

mov dx,offset szHello

int 21h

 

mov ah,1

int 21h

 

mov ah,4ch

int 21h

;代码段结束

code ends

;程序结束

end start

 

在上面的汇编程序中,首先定义了一个堆栈段。堆栈段长100字节,这里db就是字节的意思,如果是用dw就是字,100 dup(?) 中的dup是重复的意思,这句话是重复100遍,一遍定义一个字节,每个字节里全填0

   

紧接着定义了一个数据段。定义了字符串szHello,其中”0dh”,”0ah”分别是回车键,换行键的ASCII码,'$'字符串的结束标志。

 

最后定义了一个代码段。指令”assume”确定csdsss,指向的逻辑段。汇编中,assume的作用是告诉汇编程序各个段寄存器应该与哪个逻辑段对应,该伪操作把程序中定义的各个段分配给段寄存器,使程序中使用的段名与段寄存器建立起对应关系。使得汇编程序清楚在计算地址时使用哪一个段地址但并不赋予该逻辑段的段地址。没有assume这行代码也可以,但其后的变量操作需要用段跨越前缀指明所在逻辑段。所以说assume语句是设定语句,是告诉汇编器在将源代码翻译成机器语言时,CPU的各个段寄存器如何与你定义的各个逻辑段相联系。比如ASSUME CS:CODE 这个例子CS段寄存器就选了CODE代码段。

 

start:

mov ax,data

mov ds,ax ;设置数据段的段地址ds

 

mov ah,9 ; ah中的9号功能表示要显示一行字符串

mov dx,offset szHello ;取得szHello的偏移地址,也就是在ds段中的偏移地址

int 21h

 

mov ah,4ch;退出 ah中的功能号4ch表示要返回DOS

int 21h ;调用DOS

code ends

end start

周哥教IT,分享编程知识,提高编程技能,程序员的充电站。跟着周哥一起学习,每天都有进步。

通俗易懂,深入浅出,一篇文章只讲一个知识点。

当你决定关注「周哥教IT」,你已然超越了90%的程序员!

IT黄埔-周哥教IT技术交流QQ群:213774841,期待您的加入!

二维码
微信扫描二维码关注