汇编语言下的Hello world

      汇编dos窗口下的Hello world还是有点难度,非调用win32 api方式,折腾了半天,总算弄出来了.

 

方法一: 调用中断 

    HELLO.ASM:

assume cs:codesg,ds:datas

; str字符必须是13位,所以中间加了两个空格,网上很多代码也避开了这个问题,都是通过加空格,拼写错误,反正加个占位符
; 否则会输出一堆乱码,实在想不明白是什么原因
datas segment
str db 'Hello  World!','$'  
datas ends

codesg segment
	mov ax,datas
	mov ds,ax
	lea dx,str  ; 获取str的偏移地址
	mov ah,9 ; 调用9号功能输出字符串
	int 21h

	mov ah,4ch
	int 21h
codesg ends
end

 

方法二: 直接向显卡写字符串

    TEST.ASM:

assume cs:codesg,ds:datas

datas segment
db 'Hello World!'
datas ends

codesg segment
start:
	mov ax,datas
	mov ds,ax ;ds:si 指向字符串
	mov si,0

	mov bx,0b800h
	mov es,bx
	mov di,0   ;es:di 指向显卡缓冲区
	mov cx,12
	
;循环12次,向显卡缓冲区内写入字符串
s0:
	mov ah,1010b
	mov al,[si]
	mov es:[di],ax ;向屏幕逐个写入字符串
	inc si             ;移动至下一个字符串
	add di,2
	loop s0
	
	mov ax,4c00h
	int 21h

codesg ends
end start
;注:必须先清空屏幕,才能在dos开头处显示Hello world字符

   运行结果:

  hello world

 

方法三: 直接用debug命令编写exe,这个太牛了

    http://jakwings.is-programmer.com/posts/27619.html

 

你可能感兴趣的:(world,hello,汇编语言)