汇编基本语法实现

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

内容简介:堆栈的学习类似生活中的一瓶糖水,一瓶盐水,现在需要交换两个瓶子的液体。使用“堆栈”这个容器进行了一个中转。程序功能把内存单元的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段的前两个双字节中的数据已经交换了位置。

汇编基本语法实现

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

查看所有标签

猜你喜欢:

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

Go语言实战

Go语言实战

威廉·肯尼迪 (William Kennedy)、布赖恩·克特森 (Brian Ketelsen)、埃里克·圣马丁 (Erik St.Martin) / 李兆海 / 人民邮电出版社 / 2017-3-1 / CNY 59.00

Go语言结合了底层系统语言的能力以及现代语言的高级特性,旨在降低构建简单、可靠、高效软件的门槛。本书向读者提供一个专注、全面且符合语言习惯的视角。Go语言实战同时关注语言的规范和实现,涉及的内容包括语法、类型系统、并发、管道、测试,以及其他一些主题。一起来看看 《Go语言实战》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

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

Base64 编码/解码