汇编基本语法实现

栏目: 编程语言 · 发布时间: 6年前

内容简介:堆栈的学习类似生活中的一瓶糖水,一瓶盐水,现在需要交换两个瓶子的液体。使用“堆栈”这个容器进行了一个中转。程序功能把内存单元的ffff:0 ~ffff:b单元的内容复制到0:200~0:20b内存单元中。

堆栈的学习

assume cs:codesg

codesg segment

	mov ax,2000h  	;地址2000h赋值给ax
	mov ss,ax  	;ax的值传递给段寄存器ss
	mov sp,0  	;堆栈指针sp赋初值0
	pop ax  	;出栈到ax
	pop bx  	;出栈到bx
	push ax  	;ax入栈
	push bx  	;bx入栈
	pop ax  	;出栈到ax
	pop bx  	;出栈到bx

	mov ax,4c00h
	int 21h
	
codesg ends

end

首先观察代码段的前256字节称为PSP的内容

汇编基本语法实现

通过debug观察各个寄存器的值,通过现象学习堆栈的 后进先出 的操作规则。

汇编基本语法实现

可以看到进行

出栈出栈

入栈入栈

再出栈出栈

之后

ax和bx寄存器的值进行了交换。

类似生活中的一瓶糖水,一瓶盐水,现在需要交换两个瓶子的液体。使用“堆栈”这个容器进行了一个中转。

第六个程序

程序功能把内存单元的ffff:0 ~ffff:b单元的内容复制到0:200~0:20b内存单元中。

assume cs:code 

code segment

	mov ax,0ffffh  	;通过ax中转给段寄存器ds赋初值FFFFH
	mov ds,ax
	mov ax,0020h  	;通过ax中转给段寄存器es赋初值20H
	mov es,ax
	mov bx,0  	;bx置零
	mov cx,12  	;循环12次
	
s:  	mov dl,[bx]  	;循环体s 开始循环12次
	mov es:[bx],dl  ;通过dl中转把ds:0-ds:b中的内容复制到es:0-es:b
	inc bx  	;b自增一
	loop  		;循环
	
	mov ax,4c00h
	int 21h
	
code ends

end

总结:此程序类似 C语言 中的循环,通过段寄存器DS和ES、BX自加、 以及循环,达到复制内存的目的。其中bx的作用就相当于C语言中的自加量i的作用。C代码如下

char i;
for(i = 0; i < 12; i++)
{
	ds[i] = es[i];
	i++;
}

包含多个段的程序

在计算机运行程序时,程序和数据都是以二进制形式加载到内存中,实际上程序段和数据段对于计算机来说并没有任何不同。但是对于编程人员来说并不是一件好事,我们希望程序和数据以及堆栈分开存放。那么就需要对程序进行分块了。

第七个程序

交换内存中数据段前两个双字单元的数据

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

data segment  	;定义数据段
	dw 0123h,0456h,0798h,0abch,0defh,0fdeh,0cbah,0987h
data ends

stack segment  	;定义栈段
	dw 0,0,0,0,0,0,0,0
stack ends

code segment  	;定义代码段

start: 		mov ax,data  	;数据段地址给到ds
		mov ds,ax

		mov ax,stack  	;栈段地址给到ss
		mov ss,ax
		mov sp,16  	;栈段指针指向栈底
		
		
		
		push ds:[0]  	;把数据段的ds:[0]单元的双字内容 压入栈
		push ds:[2]  	;把数据段的ds:[2]单元的双字内容 压入栈
		pop ds:[0]  	;出栈到ds:[0]单元
		pop ds:[2]  	;出栈到ds:[2]单元
		
		mov ax,4c00h
		int 21h

code ends

end start
通过 debug调试器 可以即将运行的代码看到 date段 的地址为 0b36h ,通过 d命令 查看内存 0b36 处的内容,正是在程序中定义的数据段 0123h,0456h,···,0987h

栈段地址为0b37h,在内存中 0b36:0010 单元处即为在程序中定义的全0的栈段。

汇编基本语法实现

经过两次入栈和出栈之后,可以看出date段的前两个双字节中的数据已经交换了位置。

汇编基本语法实现

以上所述就是小编给大家介绍的《汇编基本语法实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

探索需求

探索需求

章柏幸、王媛媛、谢攀、杰拉尔德・温伯格、唐纳德・高斯 / 章柏幸、王媛媛、谢攀 / 清华大学出版社 / 2004-7-1 / 39.00元

本书将与您一起寻找"什么是客户真正想要的"这一问题的答案。 本书着眼于系统设计之前的需求过程,它是整个开发过程(如何设计人们想要的产品和系统)中最有挑战性的那部分。通过对一些需求分析中的常见误区和问题的分析和讨论,从和客户沟通开始,深入研究一些可能的需求,澄清用户和开发者期望值,最终给出了能够大幅度提高项目成功几率的一些建议方法。 本书由该领域内公认的两位作者合著,搜集了他们在大大小小......一起来看看 《探索需求》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换