汇编语言上

本文介绍了汇编语言的基础知识,包括最小模式下64KB的代码内存分配与数据内存分配,堆栈段、数据段和代码段的使用。此外还详细解释了如何用汇编语言进行简单运算,并给出了具体实例。

为了更好的理解计算机的工作模式,这儿初略的介绍汇编语言,先看一段最简单的代码


.MODEL	SMALL ;定义了最小模式,小模式将64kb的内存用于代码部分,另外64kb的内存用于数据部分
		.STACK	64		;堆栈段的开始,堆栈保持64个字节的存储空间
		.DATA			;数据段的开始
DATA1	DB	52H			;
DATA2	DB	29H
SUM		DB	?
		.CODE			;代码段的开始
MAIN	PROC	FAR		;程序入口点
		MOV		AX, @DATA	;加载数据段地址
		MOV		DS, AX		;给DS赋值,任意段寄存器都不能被直接赋值
		MOV		AL, DATA1	;得到第一个操作数
		MOV		BL,	DATA2	;得到第二个操作数
		ADD		AL, BL		;相加
		MOV		SUM, AL		;将结果存入sum单元
		MOV		AH,	4CH		;设置返回os
		INT		21H
MAIN	ENDP
		END		MAIN		;程序的出口点

看完这段代码,我们对汇编语言有了一个基本得认识,汇编语言与c语言不同在于汇编将代码段分离的很好,这样比较便于分析程序,这样也是很多程序员分析程序的时候会考虑将程序反汇编的原因。汇编的语法也非常严谨,有几点注意一下,段寄存器器不能够被直接赋值,比如我们给地址段DS赋值时是通过MOV AX, @DATA , MOV DS, AX实现的。还有代码段的结束方式与 C区别很大,比如代码段结束方式为 MOV AH, 4ch, INT 21H.

汇编语言有固定的格式

.MODEL	SMALL
	.STACK	64
	.DATA	
					;定义数据
	.CODE
MAIN	PROC	FAR			;程序的入口
		MOV		AX, @DATA	;加载数据段地址
		MOV		DS, AX		;赋值到DS
		
		
		
		
		MOV		AH, 4CH		;设置
		INT		21H			;返回OS
MAIN	ENDP
		END	MAIN			;程序的出口

基本按照这个模式写程序很难得出错

ORG 起始偏移,用于指定偏移地址的开始处
DB定义字节
DUP用来复制一定长度的字符
DW定义字
EQU用来定义一个不占内存位置的常量



转载于:https://my.oschina.net/lirongwei/blog/91407

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值