汇编 HelloWorld

简介:

图灵奖获奖得主,Alan Perlis曾说过:“如果一门语言没有改变你的编程思维,那么它不值得你去学习”


别人学高级语言,但是高级语言会变,我学低级语言,学了永远也不会变!


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


另附上一段代码,这段代码是网上一个博客里面的,其实代码有错,我略一修改。

assume ds:data,cs:code不能放在start后面,并且结束程序的功能号是4ch:

data segment
	output db 'hello,world',0dh,0ah,'$'
data ends

code segment
assume ds:data,cs:code
start: 
	mov ax,data
	mov ds,ax
	
	mov dx,offset output
	mov ah,09h
	int 21h
	
	mov ah,<span style="line-height: 20px;">4ch</span>
	int 21h

code ends
	end start





相关文章
|
1月前
|
存储 缓存 安全
8086汇编语言入门之HelloWorld
8086汇编语言入门之HelloWorld
29 0
[笔记]vs2015 编写汇编masm32 Helloworld
[笔记]vs2015 编写汇编masm32 Helloworld
|
安全 编译器 API
代码还原的技术 ARM汇编入门教程(一) Hello World!
代码还原的技术 ARM汇编入门教程(一) Hello World!
代码还原的技术 ARM汇编入门教程(一) Hello World!
|
C语言 iOS开发 MacOS
汇编语言版本的HelloWorld
平台 macOS 工具 nasm clang 文件 main.asm extern _printf ; 这里调用系统的一个系统调用函数, _printf, 使用extern告诉链接器该label在其他文件中有定义, _printf只接受一个string的地址, 和C语言层面上的printf是一样的 section .
1015 0
|
Windows
汇编语言学习笔记-设置开发环境,编写hello world!
我用的IDE是masm32官方网站是:http://www.masm32.com/下载的地址是:http://www.masm32au.com/masm32/m32v10r.zip(这个包适合中国人开发For programmers in Australia, China, South East Asia and the Pacific region.
1027 0
|
6月前
|
存储 Unix 编译器
汇编语言----X86汇编指令
汇编语言----X86汇编指令
218 2
|
1月前
|
存储 移动开发 C语言
【ARM汇编速成】零基础入门汇编语言之指令集(三)
【ARM汇编速成】零基础入门汇编语言之指令集(三)
|
1月前
|
编译器 C语言 计算机视觉
【ARM汇编速成】零基础入门汇编语言之指令集(二)
【ARM汇编速成】零基础入门汇编语言之指令集(二)
130 0