您的位置:首页 > 其它

汇编入门学习笔记 (五)—— 包含多个段的程序

2014-07-06 18:00 411 查看
疯狂的暑假学习之 汇编入门学习笔记 (五)—— 包含多个段的程序

参考: 《汇编语言》 王爽 第6章

1.在代码中使用数据。

assume cs:code

code segment

	dw 0123h,0456h,0789h,0defh
	
	mov ax,0
	mov bx,0

	mov ax,4c00H
	int 21h

code ends

end


dw 表示定义字型数据,db 表示定义字节型数据。

上面代码编译连接,用debug调试,-u cs:0 查看汇编代码,发现没有看到 mov ax,0 mov bx,0 等。直接运行不正常。因计算机不知道那些是数据那些是代码。如果-u cs:8 就可以看到mov ax,0 mov bx,0 等。

正确方法,要加上程序入口

assume cs:code

code segment

	dw 0123h,0456h,0789h,0defh
	
start:	mov ax,0
	mov bx,0

	mov ax,4c00H
	int 21h

code ends

end start


start可以改成其他的名字,只要入口处和end 后面的一样就行了。

2.在代码中使用栈

例子:交换0123H 跟 0456H

dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 申请了栈的空间

sp 30H 设置 栈顶的起始位置

assume cs:code

code segment
	dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
	dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
	
start:	mov ax,cs
	mov ss,ax
	mov sp,30h
		
	push cs:[0]
	push cs:[2]
		
	pop cs:[0]
	pop cs:[2]
		
	mov ax,4c00h
	int 21h
		
code ends

end start


3.将数据、代码、栈放入不同的段中

例子:将数据段中的数据,倒叙存放

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

data segment
	dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends

stack segment
	dw 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
stack ends

code segment	

start:	mov ax,data
		mov ds,ax
		mov ax,stack
		mov ss,ax
		mov sp,20h
		
		mov bx,0
		mov cx,8
	s:	push  [bx]
		add bx,2
		loop s
	
		mov bx,0
		mov cx,8
	s0:	pop  [bx]
		add bx,2
		loop s0
	
		
		mov ax,4c00h
		int 21h
		
code ends

end start


这里定义了三个段,数据段,栈段,代码段。ds,ss的值需要在代码段中指定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: