汇编资料整理(四)汇编语言程序设计

汇编语言:有顺序、分支、循环、子程序四种结构形式。 汇编程序是由伪指令和汇编指令构成,缺一不可。
编写汇编语言程序的基本步骤:

  1. 分析题意,确定设计思路及算法
  2. 对于复杂的算法要画出程序框图
  3. 根据框图编写程序
  4. 上级调试程序

一个有效的汇编程序必须有代码段,把程序指令写在其中,否则就没有意义;而数据段、堆栈段、附件段可根据实际情况选择。
伪指令又称为伪操作数,是指其不能像汇编指令一样生成可执行的二进制机器代码,只是在汇编程序对汇编语言源程序进行编译期间,由汇编程序执行的。主要起说明作用,用来指出程序分段、数据定义、存储分配、程序开始和结束等相关信息。

汇编资料整理(四)汇编语言程序设计_第1张图片

不同的计算机中,指令助记符的规定是不一样的。硬件只能识别二进制语言,因此助记符会通过汇编器转换成它们对应的二进制操作码。汇编器的作用就是相当于一个翻译。


段定义伪指令:

定义:   段名 SEGMENT [类型参数]
            ...
        段名 ENDS
SEGMENT与ENDS必须成对使用,表示段的开始和结束。段名实际是指段地址,汇编时由系统给出具体地址值。
类型参数为可选项,用于指出段的边界、段的组合、段类别标识,一般用于多模块程序设计中。
[类型参数] 
    定位类型:
    PART  该段的起始地址必须为小段的首地址,即起始地址的十六进制数最低位为0 (系统默认类型)
    BYTE  该段可以从任意地址开始
    WORD  该段必须从字边界开始,即起始地址为偶数
    DWORD 该段必须从双字边界开始,即起始地址的十六进制数最低位应该为4的倍数
    PAGE  该段必须从页边界开始,即起始地址的十六进制数最低两位为00
    组合类型:
    PRIVATE     该段为私有段,连接时不与其他同名段合并
    PUBLIC         连接时可与其他模块中的同名字段按顺序连接成一个段
    COMMON         表示该段与其他模块中的同名段有相同的起始地址,如果连接将产生覆盖;连接后,短的长度为同名段中的最长者
    STACK         表示该段为堆栈段
    AT 表达式    该段直接定位在表达式指出的位置上 
    类型标识:
    在引号总给出段的类型名。

定义:     ASSUME 段寄存器:段名,[段寄存器:段名, ...]
ASSUME 伪指令用于指明段寄存器与段的对应关系。

定义数据段、附加段、堆栈段和代码段的程序框架:

DATA SEGMENT			;定义数据段DATA
	...
DATA ENDS				;数据段结束
EXTRA SEGMENT			;定义附加段EXTRA
	...
EXTRA ENDS				;附加段结束
STACK SEGMENT PARA STACK 'STACK'			;定义堆栈段STACK
	DW 20H DUP(0)		;设置32个堆栈单元,初始值都为0
	TOP LABEL WORD		;TOP为栈顶
STACK ENDS				;堆栈段结束
CODE SEGMENT			;定义代码段CODE
ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STACK 	
START:	MOV AX,DATA
		MOV DS,AX 		;数据段寄存器DS初始化
		MOV AX,EXTRA
		MOV ES,AX		;附加段寄存器ES初始化
		MOV AX,STACK
		MOV SS,AX 		;堆栈段寄存器SS初始化
		MOV SP,OFFSET TOP 	;让堆栈指针SP指向栈顶
			...
			...
		MOV AH,4CH 		;结束程序,返回DOS
		INT 21H
CODE ENDS				;代码段结束
	END START 			;整个程序结束


数据定义伪指令:


数据定义伪指令的作用是定义存储单元的类型,如字节型或字型;并确定该单元的内容。
定义:     [存储单元名] DB(或DW、DD等伪指令) 操作数
注意:

1.存储单元可以命名或是不用任何名字
2.数据定义的伪指令:
    DB     定义字节单元
    DW     定义字单元
    DD     定义双字单元
    DQ  定义四字单元
    DT  定义十字节单元
3.操作数用于指出存储单元的内容即该单元的值。


其他伪指令:


赋值伪指令:EQU不允许重复定义;=允许重复定义
模块定义伪指令:[NAME 模块名] ... END 起始标号。
地址计数器$:地址计数器$表示当前的偏移地址值。
设置偏移地址伪指令:当前的偏移地址可以使用ORG伪指令来定义。
操作符

  •     回送偏移地址值OFFSET
  •     回送段地址值SEG
  •     类型回送操作符TYPE
  •     变量数回送操作符LENGTH
  •     字节数回送操作符SIZE
  •     属性定义操作符PTR
  •     多重属性操作符THIS
  •     类型操作符LABL

注释伪指令:分号";"后面的内容为注释。

你可能感兴趣的:(汇编语言,伪指令)