码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-07-08 18:16:07      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:asm   汇编   暑假   

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


参考: 《汇编语言》 王爽 第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的值需要在代码段中指定。




汇编入门学习笔记 (五)—— 包含多个段的程序,布布扣,bubuko.com

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

标签:asm   汇编   暑假   

原文地址:http://blog.csdn.net/billvsme/article/details/37324183

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!