汇编语言 HelloWorld (详细注释版)

来源:互联网 发布:小站托福有mac版吗 编辑:程序博客网 时间:2024/05/14 06:40

闲来无聊,想重新学习一下汇编,第一个helloworld,想起绝影的一句话"你们学高级语言,但是高级语言会变,我学低级语言,学了永远也不会变!" - -b


stack segment stack ; 定义堆栈段
db 100 dup(?) ;堆栈段长100字节, 这里db就是字节的意思,如果是用dw就是字,100 dup(?) 中的dup是重复的意思,这句话是重复100遍,一遍定义一个字节,每个字节里全填0
stack ends ; 堆栈段结束


data segment ;数据段
szHello db 'hello,world',0dh,0ah,'$' ;定义szHello , 0dh,0ah分别是回车键,换行键的ASCII码, '$'是DOS功能调用INT 21H中9号功能要求的要显示字符串的结束标志,写成szHello db 'hello,world',0dh,0ah,24h;也可以,因为24h就是'$'
data ends ;数据段结束


code segment ;代码段
assume cs:code,ds:data,ss:stack ;确定cs,ds,ss,指向的逻辑段


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


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


mov ah,9 ; ah中的9号功能表示要显示一行字符串
mov dx,offset szHello ;取得szHello的偏移地址,也就是在ds段中的偏移地址
int 21h


;暂停,任意键关闭
mov ah,1 ;这两句是从键盘输入一个字符功能
int 21h


mov ah,4ch ;退出 ah中的功能号4ch表示要返回DOS
int 21h ;调用DOS
code ends
end start


0 0
原创粉丝点击