ARM汇编语言源程序格式

ARM汇编语言源程序格式
ARM汇编语言源程序格式

ARM汇编语言源程序格式ARM汇编语言源程序格式2010-11-16 13:52

来源:MCU嵌入式领域

常用ARM源程序文件类型

汇编语言程序的结构1

汇编语言程序的结构2

汇编语言程序的结构3

汇编语言程序的结构4 ARM的汇编语言程序一般由几个段组成,每个段均由AREA伪操作定义。

段可以分为多种,如代码段、数据段、通用段,每个段又有不同的属性,如代码段的默认属性为READONLY,数据段的默认属性为READWRITE。

本程序定义了两个段,第一个段为代码段codesec,它在存储器中存放用于程序执行的代码以及main函数的本地字符串;第二个段为数据段constdatasec,存放了全局的字符串,由于本程序没有对数据进行写操作,该数据段定义属性为READONLY。

汇编语言的行构成1

格式:

[标签]指令/伪操作/伪指令操作数[;语句的注释]

所有的标签必须在一行的开头顶格写,前面不能留空格,后面也不能跟C 语言中的标签一样加上":";

ARM汇编器对标识符的大小写敏感,书写标号及指令时字母的大小写要一致;

注释使用";"符号,注释的内容从";"开始到该行的结尾结束

汇编语言的行构成2

标签

标签是一个符号,可以代表指令的地址、变量、数据的地址和常量。

一般以字母开头,由字母、数字、下划线组成。

当符号代表地址时又称标号,可以以数字开头,其作用范围为当前段或者在下一个ROUT伪操作之前。

指令/伪操作

指令/伪操作是指令的助记符或者定义符,它告诉ARM的处理器应该执行什么样的操作或者告诉汇编程序伪指令语句的伪操作功能。

汇编语言的标号1

标号代表地址。

标号分为段内标号和段外标号。段内标号的地址值在汇编时确定,段外编号的地址值在链接时确定。

在程序段中,标号代表其所在位置与段首地址的偏移量。根据程序计数器(PC)和偏移量计算地址即程序相对寻址。

在映像中定义的标号代表标号到映像首地址的偏移量。映像的首地址通常被赋予一个寄存器,根据该寄存器值与偏移量计算地址即寄存器相对寻址。

例如:

loop SUBS r0,r0,#1;每次循环使r0=r0-1 BNE loop;跳转到loop标号

去执行

汇编语言的标号2

在宏中也可以使用局部符号。

局部标号是0~99的十进位数开始,可以重复定义。

局部标号引用格式:

%{F|B}{A|T}N{routname}

%:局部标号引用操作。

F:编译器只向前搜索。

B:编译器只向后搜索。

A:编译器搜索宏的所有嵌套层次。

T:编译器搜索宏的当前层。

例如:

01 SUBS r0,r0,#1;每次循环使r0=r0-1 BNE%B01;跳转到01标号去执行

汇编语言的常量

常量:其值在程序运行过程中不能被改变的量。

(1)数字常量:数字常量有3种表示方式:

十进制数,如1、2、123

十六进制数,如0x123,0xabc n进制数,形式为n_XXX,n的范围是2到9,XXX是具体数字

(2)字符常量:由单引号及中间的字符组成,包括C语言中的转义字符,如'a','\n'

(3)字符串常量:由一对双引号及中间的字符串表示,中间也可以使用C语言中的转义字符,比如:"abcdef[message]xa\r\n"

(4)逻辑常量:{TRUE},{FALSE},注意带大括号

汇编程序的变量代换1

这里所说的变量,是相对于汇编程序的"变量",是用于汇编程序进行处理的,但一旦编译到程序中,则不会改变,成为常量。

在字符串变量的前面有一个$字符,在汇编时编译器将用该字符串变量的内容代替该串变量。

在数字变量前面有一个代换操作符"$",编译器会将该数字变量的值转换为十六进制的字符串,并用该十六进制的字符串代换"$"后的数字变量。

需要将"$"字符加入到字符串中,可以用"$$"代替,此时编译器将不再进行变量代换,而是把"$$"看作一个"$"。

在两个"|"之间的"$"并不进行变量的代换,但如果"|"在双引号内,则将进行变量代换。

使用"."来表示字符串中变量名的结束。

汇编程序的变量代换2

字符串"aaa str1$str1.l1$l1,a1$https://www.360docs.net/doc/291830345.html,c"中的3个变量将在编译时被替换。

程序运行后看到下面结果:

aaa str1:bbb l1:T,a1:0000004 Fccc

伪指令

在ARM汇编语言源程序中有些特殊助记符,它们没有相对应的操作码或者机器码,通常称为伪指令,它们所完成的操作称为伪操作。

伪指令在源程序中的作用是为完成汇编程序作各种准备工作的,由汇编程序在源程序的汇编期间进行处理,仅在汇编过程中起作用。

在ARM的汇编程序中,有如下几种伪指令:

符号定义伪指令

数据定义伪指令

汇编控制伪指令

信息报告伪指令

宏指令以及其他伪指令

符号定义伪指令

作用:用于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等。

符号定义有如下几种伪指令:

用于定义局部变量的LCLA、LCLL和LCLS。

用于定义全局变量的GBLA、GBLL和GBLS。

用于对变量赋值的SETA、SETL和SETS。

为通用寄存器列表定义名称的RLIST。

符号定义伪指令1-1

(1)LCLA、LCLL和LCLS

格式:

LCLA/LCLL/LCLS局部变量名

说明:LCLA、LCLL和LCLS伪指令用于定义一个汇编程序中的局部变量并

初始化。

其中:

LCLA定义一个局部的数字变量,初始化为0。

LCLL定义一个局部的逻辑变量,初始化为F。

LCLS定义一个局部的字符串变量,初始化为空串。

这3条伪指令用于声明局部变量,在其局部作用范围内变量名必须惟一,

例如在宏内。

符号定义伪指令1-2

符号定义伪指令2-1 2)GBLA、GBLL和GBLS

格式:

GBLA/GBLL/GBLS变量名

说明:GBLA、GBLL和GBLS伪操作定义一个汇编程序中的全局变量并初始化。

其中:

GBLA定义一个全局数字变量,并初始化为0。

GBLL定义一个全局逻辑变量,并初始化为F。

GBLS定义一个全局字符串变量,并初始化为空串。

这3条伪指令用于定义全局变量,因此在整个程序范围内变量名必须惟一。

符号定义伪指令2-2

例如:

GBLA num1;定义一个全局的数字变

;量,变量名为num1 num1 SETA 0xabcd;将该变量赋值为0xabcd GBLL l2;定义一个全局的逻辑变

;量,变量名为l2 l2 SETL{FALSE};将该变量赋值为假

GBLS str3;定义一个全局的字符串变

;量,变量名为str3 str3 SETS"Hello!";将该变量赋值为"Hello!"

符号定义伪指令3-1

(3)SETA、SETL和SETS

格式:

变量名SETA/SETL/SETS表达式

说明:

SETA:给一个数字变量赋值。

SETL:给一个逻辑变量赋值。

SETS:给一个字符串变量赋值。

格式中的变量名必须为已经定义过的全局或局部变量,表达式为将要赋给变量的值。

符号定义伪指令3-2

例如:

LCLA num1;定义一个局部的数字

;变量,变量名为num1 num1 SETA 0x1234;将该变量赋值

;为0x1234 LCLS str3;定义一个局部的字符串变

;量,变量名为str3 str3 SETS"Hello!";将该变量赋值为

;"Hello!"

符号定义伪指令4 4)RLIST

格式:

名称RLIST{寄存器列表}

说明:RLIST可用于对一个通用寄存器列表定义名称,该名称可在ARM指令LDM/STM中使用。在LDM/STM指令中,列表中的寄存器为根据寄存器的编号由低到高访问次序,与列表中的寄存器排列次序无关。

例如:

pblock RLIST{R0-R3,R7,R5,R9}

;将寄存器列表名称定义为pblock,可在ARM指令

;LDM/STM中通过该名称访问寄存器列表

数据定义伪指令

作用:为数据分配存储单元,同时初始化。

有如下几种:

DCB字节分配

DCW/DCWU半字(2字节)分配

DCD/DCDU字(4字节)分配

DCQ/DCQU 8个字节分配

DCFS/DCFSU单精度浮点数分配

DCFD/DCFDU双精度浮点数分配

SPACE分配一块连续的存储单元

FIELD定义一个结构化的内存表的数据域

MAP定义一个结构化的内存表首地址

数据定义伪指令1

(1)DCB

格式:

标号DCB表达式

说明:分配一块字节单元并用伪指令中指定的表达式进行初始化。表达式可以为使用双引号的字符串或0~255的数字。

DCB可用"="代替。

例如:

Array1 DCB 1,2,3,4,5;数组

str1 DCB"Your are welcome!"

;构造字符串并分配空间

数据定义伪指令2

(2)DCW/DCWU

格式:

标号DCW/DCWU表达式

说明:DCW分配一段半字存储单元并用表达式值初始化,它定义的存储空间是半字对齐的。

DCWU功能与DCW类似,只是分配的字存储单元不严格半字对齐。

例如:

Arrayw1 DCW 0xa,-0xb,0xc,-0xd

;构造固定数组并分配半字存储单元

数据定义伪指令3

(3)DCD/DCDU

格式:

标号DCD/DCDU表达式

说明:DCD伪指令用于分配一块字存储单元并用伪指令中指定的表达式初始化,它定义的存储空间是字对齐的。

DCD也可用"&"代替。

DCDU功能与DCD类似,只是分配的存储单元不严格字对齐。

例如:

Arrayd1 DCD 1334,234,345435

;构造固定数组并分配字为单元的存储单元

Label DCD str1;该字单元存放str1的地址

数据定义伪指令4

(4)DCQ/DCQU

格式:

标号DCQ/DCQU表达式

说明:DCQ用于分配一块以8个字节为单位的存储区域并用伪指令中指定的表达式初始化,它定义的存储空间是字对齐的。

DCQU功能与DCQ类似,只是分配的存储单元不严格字对齐。

例如:

Arrayd1 DCQ 234234,98765541

;构造固定数组并分配字为单元的存储空间。

;注意:DCQ不能给字符串分配空间

数据定义伪指令5

(5)DCFD/DCFDU

格式:

标号DCFD/DCFDU表达式

说明:DCFD用于为双精度的浮点数分配一片连续的字存储单元并用伪指令中指定的表达式初始化,它定义的存储空间是字对齐的。

每个双精度的浮点数占据两个字单元。

DCFDU功能与DCFD类似,只是分配的存储单元不严格字对齐。

例如:

Arrayf1 DCFD 6E2 Arrayf2 DCFD 1.23,1.45

数据定义伪指令6

(6)DCFS/DCFSU

格式:

标号DCFS/DCFSU表达式

说明:DCFS用于为单精度的浮点数分配一片连续的字存储单元并用表达式初始化,它定义的存储空间是字对齐的。

每个单精度浮点数使用一个字单元。

DCFSU功能与DCFS类似,只是分配的存储单元不严格字对齐。

例如:

Arrayf1 DCFS 6E2,-9E-2,-.3 Arrayf2 DCFSU 1.23,6.8E9

数据定义伪指令7 7)SPACE

格式:

标号SPACE表达式

说明:SPACE用于分配一片连续的存储区域并初始化为0,表达式为要分配的字节数。

SPACE也可用"%"代替。

例如:

freespace SPACE 1000

;分配1000字节的存储空间

数据定义伪指令8

(8)MAP

格式:

MAP表达式[,基址寄存器]

说明:MAP定义一个结构化的内存表的首地址。此时,内存表的位置计数器{VAR}(汇编器的内置变量)设置成该地址值。

"^"可以用来代替MAP。

表达式可以为程序中的标号或数学表达式,基址寄存器为可选项,当基址寄存器选项不存在时,表达式的值即为内存表的首地址,当该选项存在时,内存表的首地址为表达式的值与基址寄存器的和。

MAP可以与FIELD伪操作配合使用来定义结构化的内存表。

例如:

MAP 0x130,R2;内存表首地址为0x130+R2

数据定义伪指令9

(9)FIELD

格式:标号FIELD字节数

说明:FIELD用于定义一个结构化内存表中的数据域。

"#"可用来代替FIELD。

FIELD常与MAP配合使用来定义结构化的内存表:FIELD伪指令定义内存表中的各个数据域,MAP则定义内存表的首地址,并为每个数据域指定一个标号以供其他的指令引用。

需要注意的是MAP和FIELD伪指令仅用于定义数据结构,并不分配存储单元。

例如:

MAP 0xF10000

;定义结构化内存表首地址为0xF10000 count FIELD 4

;定义count的长度为4字节,位置为0xF1000+0 xFIELD 4

;定义x的长度为4字节,位置为0xF1004 yFIELD 4

;定义y的长度为4字节,位置为0xF1008

汇编控制伪指令

作用:指引汇编程序的执行流程。

常用的伪操作包括:

(1)MACRO和MEND:宏定义的开始与结束。

(2)IF、ELSE和ENDIF:根据逻辑表达式的成立与否决定是否在编译时加入某个指令序列。

(3)WHILE和WEND:根据逻辑表达式的成立与否决定是否循环执行这个代码段。

(4)MEXIT:从宏中退出。

MACRO和MEND

格式

MACRO

[$标号]宏名[$参数1,$参数2,…]

指令序列

MEND

其中,$标号在宏指令被展开时,标号可被替换成相应的符号(在一个符号前使用$,表示程序在汇编时将使用相应的值来替代$后的符号),$参数1为宏指令的参数,当宏指令被展开时将被替换成相应的值,类似于函数中的形式参数。

宏指令可以重复使用,与子程序有些类似,子程序可以节省存储空间,提供模块化的程序设计。但是使用子程序结构时需要保存/恢复现场,从而增加了系统的开销。

使用说明:在子程序比较短而需要传递的参数比较多的情况下,可使用宏汇编技术。

宏定义伪指令

例子

MACRO;宏定义开始

$label jump$a1,$a2;宏的名称为jump,有2个参数a1和a2

$label.loop1;$label.loop1为宏体的内部标号

BGE$label.loop1

$label.loop2 BL$a1;参数$a1为一个子程序的名称

BGT$label.loop2

ADR$a2

MEND;宏定义结束

宏定义伪指令

在程序中调用该宏

exam jump sub,det;调用宏jump,宏的标号为exam,参数1为sub,参数2

为det

程序被汇编后,宏的展开结果:

examloop1

BGE examloop1 examloop2 BL sub BGT examloop2 ADR det IF、ELSE和ENDIF

格式:

IF逻辑表达式

代码段1 ELSE

代码段2 ENDIF

说明:能根据逻辑表达式的成立与否决定是否在编译时加入某个指令序列。IF、ELSE和ENDIF分别可以用"[","|","]"代替。如果IF后面的逻辑表达式

为真,则编译代码段1,否则编译代码段2。ELSE及代码段2也可以没有,这时,当IF后面的逻辑表达式为真时,则代码段1,否则继续编译后面的指令。

WHILE和WEND

格式:

WHILE逻辑表达式

代码段

WEND

说明:WHILE和WEND伪指令能根据逻辑表达式的成立与否决定是否循环执行这个代码段。当WHILE后面的逻辑表达式为真时,则执行代码段,该代码段执行完毕后,再判断逻辑表达式的值,若为真则继续执行,一直到逻辑表达式的值为假。

例如:

GBLA num;声明全局的数字变量num num SETA 9;由num控制循环次数

WHILE num 0

sub r0,r0,1 add r1,r1,1 WEND

其他伪指令

在汇编程序中经常会使用一些其他的伪指令,包括以下18条:

ASSERT AREA ALIGN CODE16/CODE32 ENTRY END EQU IMPORT

EXPORT/GLOBAL EXTERN INCBIN GET/INCLUDE RN ROUT ADR ADRL LDR NOP

其他伪指令1

(1)ASSERT

格式:

ASSERT逻辑表达式

说明:ASSERT用来表示程序的编译必须满足一定的条件,如果逻辑表达式

不满足,则编译器会报错,并终止汇编。

例如:

ASSERT ver 7;保证ver 7

其他伪指令2 2)AREA

格式:AREA段名属性,…

说明:AREA用于定义一个代码段、数据段或者特定属性的段。如果段名以

数字开头,那么该段名需用"|"字符括起来,如|7wolf|,用C的编译器产生的

代码一般也用"|"括起来。

属性部分表示该代码段/数据段的相关属性,多个属性可以用","分隔。

常见属性如下:

①DATA:定义数据段,默认属性是READWRITE。

②CODE:定义代码段,默认属性是READONLY。

③READONLY:表示本段为只读。

④READWRITE:表示本段可读写。

⑤ALIGN=表达式,表示段的对齐方式为2的表达式次方,例如:表达式=3,则对齐方式为8字节对齐。表达式的取值范围为0~31。

⑥COMMON属性:定义一个通用段,这个段不包含用户代码和数据。

其他伪指令3

(3)ALIGN

格式:

ALIGN[表达式[,偏移量]]

说明:ALIGN伪操作可以通过填充字节使当前的位置满足一定的对齐方式。

表达式的值为2的幂,如1、2、4、8、16等,用于指定对齐方式。

如果伪操作中没有指定表达式,则编译器会将当前位置对齐到下一个字的

位置。偏移量也是个数字表达式,如果存在偏移量,则当前位置自动对齐到2

的表达式值次方+偏移量。

例如:

AREA||.data||,DATA,READWRITE,ALIGN=2

其他伪指令4

(4)CODE16/CODE32

格式:CODE16/CODE32

说明:CODE16伪操作指示编译器后面的代码为16位的Thumb指令。

CODE32伪操作指示编译器后面的代码为32位的ARM指令。

如果在汇编源代码中同时包含Thumb和ARM指令时,可以用"CODE32"通知

编译器后的指令序列为32位的ARM指令,用"CODE16"伪指令通知编译器后的指令序列为16位的Thumb指令。

CODE16/CODE32不能对处理器进行状态的切换。

例如:

CODE32;32位的ARM指令

AREA||.text||,CODE,READONLY

LDR R0,=0x8500;

BX R0;程序跳转,并将处理器切换到Thumb状态

CODE16;16位的Thumb指令

ADD R3,R3,1 END;源文件结束

其他伪指令5-1

(5)ENTRY

格式:

ENTRY

说明:ENTRY用于指定汇编程序的入口。

在一个完整的汇编程序中至少要有一个ENTRY,程序中也可以有多个,此时,程序的真正入口点可在链接时指定,但在一个源文件里最多只能有一个ENTRY或者没有ENTRY。

其他伪指令5-2

其他伪指令6

(6)END

格式:

END

说明:END告诉编译器已经到了源程序的结尾。

例如:

第三章 8086汇编语言程序格式

第三章8086汇编语言程序格式 练习题 3.4.1 单项选择题 1.下列选项中不能作为名字项的是()。 A.FH B.A3 C.3B D.FADC 2.下列指令不正确的是()。 A.MOV AL,123 B.MOV AL,123Q C.MOV AL,123D D.MOV AL,123H 3.下列指令不正确的是()。 A.MOV BL,OFFSET A B.LEA BX,A C.MOV BX,OFFSET A D.MOV BX,A 4.若定义“BUF DB 1,2,3,4”,执行MOV AL,TYPE BUF 后AL=()。 A.0 B.1 C.2 D.3 5.若定义“A EQU 100”,执行“MOV AX,A”后,AX=()。 A.A的偏移地址B.A单元中的内容 C.100 D.A的段地址 6.若定义“B DW 1,2,10 DUP(0)”,则该伪指令分配()字节单元。 A.10 B.20 C.22 D.24 7.若定义“C DD 2,4”,则该伪指令分配()个字节单元。 A.2 B.4 C.6 D.8 8、伪指令是()规定的汇编说明符,它在源程序汇编时进行说明。 A、DEBUG B、LINK C、MASM D、EDIT 9.在上机操作过程中,MASM命令执行后,除了生成一个目标文件外,根据选择还可以生成一个()文件。 A..LST B..EXE C..MAP D..ASM 10.LINK命令执行后可以生成一个以()为扩展名的文件。 A.ASM B.EXE C.OBJ D.COM 11.一个段最大可定义()字节。 A.1M B.64K C.32K D.16K 12.若要求一个段的起始位置能被256整除的单元开始,在定位方式选项中应选()。 A.BYTE B.WORD C.PARA D.PAGE 13.宏指令与子程序相比,在多次调用时,宏指令调用的目标程序长度比子程序调用的()。 A.相同B.长C.短D.不定 14.宏指令与子程序相比,子程序调用的执行速度比宏指令的()。 A.相同B.快C.慢D.不定 15.ASSUME伪指令说明了汇编程序所定义段与段寄存器的关系,它只影响()的设定。 A.源程序B.目标程序C.汇编程序D.连接程序

汇编语言对文件简易加密解密

课程设计报告 课程微机原理课程设计 题目简易文件加密解密 系别物理与电子工程学院 年级08级专业电子科学与技术 班级三学号0502083(02 14 23 24) 学生姓名崔雪飞陈祥刘刚李从辉 指导教师居伟骏职称讲师 设计时间2011-4-18 ~ 2011-4-22

目录 第一章绪论 (2) 第二章分析与设计 (3) 2.1 题目 (3) 2.2 要求 (3) 2.3 方案设计与论证 (3) 2.3.1 整体设计思路 (3) 2.3.2 方案选择 (3) 2.4结构框图等设计步骤 (4) 第三章实验程序及分析 (6) 3.1 宏定义 (6) 3.2 加密模块 (9) 3.3 解密模块 (9) 3.4 加密和解密算法子程序 (10) 第四章实验结果及问题处理 (12) 4.1 实验结果 (12) 4.2出现的问题以及解决的方案 (13) 4.2.1 文件写操作问题 (13) 4.2.2 读入缓冲区的大小问题 (14) 4.2.3不同文件类型加解密问题 (14) 4.2.4 文件结束标志 (15) 第五章总结与体会 (16) 参考文献 (18) 附录 (19)

第一章绪论 随着计算机硬件的发展,微机系统的功能越来越强,而且计算机的程序设计语言也经过了一个发展的过程。从最基本的机器语言到汇编语言,并到高级的智能化语言,如visual C++、visual Basic等,不断前进。 汇编语言(Assembly Language)是面向机器的程序设计语言。在汇编语合中,用助记符( Memoni )代替操作码,用地址符号(Symbol)或标号(Label)代替地址码。这样用符号代替机器语言的二进制码,就把机器语言变成了汇编语言。于是汇编语言亦称为符号语言。使用汇编语言编写的程序,机器不能直接识别,要由一种程序将汇编语言翻译成机器语言,这种起翻译作用的程序叫汇编程序,汇编程序是系统软件中语言处理系统软件。汇编程序把汇编语言翻译成机器语言的过程称为汇编。 汇编语言是一种功能很强的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。汇编语言,作为一门语言,对应于高级语言的编译器,需要一个“汇编器”来把汇编语言原文件汇编成机器可执行的代码。高级的汇编器如MASM,TASM等等为我们写汇编程序提供了很多类似于高级语言的特征,比如结构化、抽象等。在这样的环境中编写的汇编程序,有很大一部分是面向汇编器的伪指令,已经类同于高级语言。现在的汇编环境已经如此高级,即使全部用汇编语言来编写windows的应用程序也是可行的,但这不是汇编语言的长处。汇编语言的长处在于编写高效且需要对机器硬件精确控制的程序。 对给定的文件进行加密是当今计算机科学中的一个非常热门话题。在本课程设计中,目的是给给定的文件进行加密和解密,加密方法有:文件里文本的二进制与10101010B作求和,解密则相应的与10101010B相减。课设只是把所学的知识加以应用,不能轻视题目的简单,我们要借此机会,加强汇编语言的学习,并加深自己的知识。 在设计中,程序应用了BIOS中一些系统中断,设计了人性化的界面,这些是自学的汇编知识并加以应用,当然也有很多DOS系统的功能调用。总之,自己结合平时所学和最近的自学,认真的完成课题,并很好的实现了相应的功能。

试验二ARM汇编语言程序设计

实验二 ARM汇编语言程序设计 一、实验目的 1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程 2.掌握ARM汇编指令 二、实验设备 1. EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆。 2. PC操作系统WIN98或WIN2000或WINXP, ADS1.2集成开发环境,仿真器驱动程序。 三、汇编语言简介 1.ARM汇编的一些简要的书写规范 ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。ARM汇编对标识符的大小写敏感,书写标号及指令时字母大 小写要一致。在ARM汇编中,ARM指令、伪指令、寄存器名等可以全部大写或者全 部小写,但不要大小写混合使用。注释使用“;”号,注释的内容由“;”号起到此 行结束,注释可以在一行的顶格书写。 详细的汇编语句及规范请参照ARM汇编的相关书籍、文档。 2. ARM汇编语言程序的基本结构 在ARM汇编语言程序中,是以程序段为单位来组织代码。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段的和数据段,代码段的内容为执 行代码,数据段存放代码运行时所需的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形 成一个可执行文件。可执行映像文件通常由以下几部分构成: ◆ 一个或多个代码段,代码段为只读属性。 ◆ 零个或多个包含初始化数据的数据段,数据段的属性为可读写。 ◆ 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。 链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定 相同。 3. 简单的小例子 下面是一个代码段的小例子 AREA Init,CODE,READONLY ENTRY LDR R0, =0x3FF5000 LDR R1, 0x0f STR R1, [R0]

汇编语言程序设计(第四版)第3章【课后答案】

汇编语言程序设计第四版 【课后习题答案】--囮裑為檤 第3章汇编语言程序格式 〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用? 〔解答〕 伪指令语句与硬指令语句的本质区别是能不能产生CPU动作; 伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。 〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成? 〔解答〕 为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符; 汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。 〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。 〔解答 保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。汇编语言对大小写不敏感。如定义字节数和字符串的DB就是伪指令助记符。 〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成? 〔解答〕 汇编语句有执行性语句和说明性语句; 执行性语句由标号、硬指令助记符、操作数和注释四部分组成; 说明性语句由名字、伪指令助记符、参数和注释四部分组成 〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。 〔解答〕 ⒈编辑文本编辑程序汇编语言源程序.asm ⒉汇编汇编程序目标模块文件.obj ⒊连接连接程序可执行文件.exe或.com

⒋调试调试程序应用程序 〔习题3.6〕区分下列概念: (1)变量和标号 (2)数值表达式和地址表达式 (3)符号常量和字符串常量 〔解答〕 (1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。 (2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。 (3)在程序中,为了使常量更便于使用和阅读,经常将一些常量用常量定义语句定义为符号常量,被一对双引号括起来的若干个字符组成的字符序列被称为字符串常量。 〔习题3.7〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的错误原因。 (1)mov byte ptr [bx],1000 (2)mov bx,offset myword[si] (3)cmp mybyte1,mybyte2 (4)mov al,mybyte1+mybyte2 (5)sub al,myword (6)jnz myword 〔解答〕 (1)1000超出了一个字节范围 (2)寄存器的值只有程序执行时才能确定,而offset是汇编过程计算的偏移地址,故无法确定,改为lea bx,myword[si] (3)两个都是存储单元,指令不允许 (4)变量值只有执行时才确定,汇编过程不能计算 (5)字节量AL与字量myword,类型不匹配 (6)Jcc指令只有相对寻址方式,不支持间接寻址方式 〔习题3.8〕OPR1是一个常量,问下列语句中两个AND操作有什么区别? AND AL,OPR1 AND 0feh 〔解答〕

汇编语言程序设计练习题及参考答案

一、单项选择题 从每小题的四个备选答案中,选出一个正确答案,并将正确答案的番号填人括号内。 1.用来存放下一条将要执行的指令地址的寄存器是(B) A.SP B.IP C.BP D.CS 2.要使串处理从低地址向高地址进行,应把标志位置为(D) A.IF=1B.TF=0 C.DF=1D.DF=0 3.使状态标志位CF清零的错误指令是(C) A.OR AX,AX B.SUB AX,AX C.MOV CF,0D.CLC 4.设SP=1110H,执行PUSH AX指令后,SP的内容为(B) A.SP=1112H B.SP=110EH C.SP=1111H D.SP=110FH 5.汇编源程序出现语法错误的指令有(D) A.MOV[BX+SI],AL B.MOV AX,[BP+DI] C.MOV DS,AX D.MOV CS,AX 6.下列串操作指令中,必须同时指明源串和目的串地址的指令是(D) A.STOSW B.LODSW C.SCASW D.CMPSW 7.设BL中有一无符号数,实现把BL中的数乘以2,应选用的指令是(B) A.SHR BL,1B.SHL BL,1 C.SAR BL,1D.RCR BL,1 8.执行PUSH AX指令的正确步骤是(A) A.1.SP←SP-1,(SP)←AH B.1.(SP)←AH,SP←SP-1 2.SP←SP-1,(SP)←AL2.(SP)←AL,SP←SP-1 C.1.SP←SP+1,(SP)←AH D.1.(SP)←AH,SP←SP+1 2.SP←SP+1,(SP)←AL2.(SP)←AL,SP←SP+1 9.CF=1时转移到目标地址的条件转移指令是(B) A.JNC B.JC C.JZ D.JS 10.在执行NEG指令时,对标志位CF有影响,其影响的规则是(C) A.对正数求补时,CF=0B.对负数求补时,CF=0 C.对非零数求补时,CF=1D.对零求补时,CF=1 11.算术右移SAR和逻辑右移SHR两条指令执行后结果完全相同的情况是(A) A.目的操作数最高位为0B.目的操作数最高位为1 C.目的操作数为任意情况D.无论什么情况都不可能相同 12.设AL=04H,BL=0F8H,执行IMUL BL指令后,结果是(D) A.AX=0032H B.AX=00E0H C.AX=03E0H D.AX=0FFE0H 13.指令的操作数中,允许出现表达式,例如BUF1与BUF2均为变量名,下面指令中语法正确的是(D) A.MOV AX,BUFl*BUF2 B.MOV AX,BUF1/BUF2 C.MOV AX,BUF1+ES:BUF2

汇编语言程序设计课后习题解答宋人杰2版

第1章汇编语言基础知识 1.简述汇编语言源程序、汇编程序、和目标程序的关系。 答:用汇编语言编写的程序称为汇编源程序;汇编源程序在汇编程序的翻译下转换成计算机语言变成目标程序。 2. 简述汇编语言的优缺点。 答:(1) 汇编语言的优点: ①可有效地访问、控制计算机各种硬件设备,如磁盘、存储器、CPU、I/O端口等。. ②目标代码简短,占用内存少,执行速度快,是高效的程序设计语言。 ③可与高级语言配合使用,应用十分广泛。 (2) 汇编语言的缺点: ①通用性和可移植性较差 ②相对于高级语言来说较繁锁、易出错、不够直观。 3.CPU的寻址能力为8KB,那么它的地址总线的宽度为多少? 答:13 4. 1KB的存储器有多少个存储单元? 答:1024个字节。 5. 指令中的逻辑地址由哪两部分组成? 答:指令中的逻辑地址由段基址和偏移量组成。 6. 以下为用段基址:偏移量形式表示的内存地址,试计算它们的物理地址。 (1) 12F8:0100 (2) 1A2F:0103 (3) 1A3F:0003 (4) 1A3F:A1FF 答: (1) 13080H (2) 1A3F3H (3) 1A3F3H (4) 245EFH 7. 自12FA:0000开始的内存单元中存放以下数据(用十六进制形式表示): 03 06 11 A3 13 01,试分别写出12FA:0002的字节型数据、字型数据及双字型数据 的值。 答:字节型数据:11H 字型数据:0A311H 双字型数据:0113A311H 8. 内存中某单元的物理地址是19318H,段基地址为1916H,则段内偏移地址为 多少?若段内偏移地址为2228H,则段基地址为多少? 答:若段基地址为1916H,则段内偏移地址为01B8H;若段内偏移地址为2228H,则段基地址为170FH 9. 在实模式环境中,一个段最长不能超过多少字节? 答:64KB 10. 实模式可寻址的内存范围是多少? 答:1MB

汇编语言源程序的编辑、汇编、连接的方法

汇编语言源程序地编辑、汇编、连接地方法一、编辑源程序 汇编语言源程序:用汇编语句编写地解决应用问题地程序. 汇编程序:将汇编语言源程序翻译成机器语言程序地系统. 汇编:将汇编语言程序翻译成机器语言程序地过程. 在编辑汇编语言源程序时,对计算机硬件工作环境无特殊要求,对软件工作环境要求也很简单,只需用建立码文本文件地软件即可. ()编辑软件 行编辑软件: 全屏编辑软件:、、、、等. 当输入、建立和修改源程序时,可任选一种编辑软件,不要用格式控制符,要求编辑完成地文件扩展名一定是. ()汇编程序 有汇编、宏汇编及等,一般使用宏汇编,因它比功能强.适用于系列指令系统所编写地汇编语言程序,是比较先进地汇编工具. ()连接程序 用连接程序或,将产生地机器代码程序()文件连接成可执行程序,比更先进. ()辅助工具程序() 进行汇编语言程序调试和文件格式转换地程序有: 动态调试程序 文件格式转换程序 交叉引用程序 编辑、汇编、连接、调试过程如图所示.

(简称)也是动态调试程序,可在和环境下运行,用户界面十分友好. 二、汇编源程序 用编辑软件建立地源程序文件,必须经过汇编才能产生文件.为此,需键入: :> <源文件名> 或:> 按前一种格式键入,屏幕上显示: () () [<>]: []: []: 以上信息中方括中为该项提示地缺省回答值,冒号后面等待用户输入信息,若不改变缺省值则直接按回车键. 汇编后生成以下几个文件: ()文件 文件是必须生成地一个目标代码文件,当源程序中无语法错误时,则在当前工作盘上自动存入一个文件,供下一步连接用. 若源程序有语法错误时,会出现错误信息提示: 源程序文件行错误信息代码错误说明信息 最后信息提示:

练习汇编语言源程序的编辑、汇编和连接

实验二练习汇编语言源程序的编辑、汇编和连接 一、实验目的 1、熟练使用EDIT编辑软件编辑汇编语言源程序。 2、熟练使用MASM宏汇编软件汇编源程序。 3、熟练使用LINK连接程序生成.EXE文件。 二、实验任务 利用EDIT、MASM、LINK找出下面的源程序中的错误,并得出运行结果。 DATA SEGMENT A DW5F73H B DW CD89H C dw? Data ends CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,A MOV BX,B ADD AX,BX

MOV C,AX MOV AH,4CH INT21H CODE ENDS END START 三、实验设备 PC机一台 四、实验步骤 1、输入源程序。 2、汇编、连接程序,生成.EXE文件,执行文件,检查结果。 3、

4、 5、 6、

实验一的相关知识 以下程序都是在DOS操作系统完成的。一般情况下MASM、LINK都在一个MASM子目录下。 一、编辑程序(EDIT) 用户在任一目录下都可以输入EDIT,进入编辑环境,输入源程序,并以.ASM的扩展名保存。 输入以下源程序,并以TEST.asm保存。 DATA SEGMENT A DW5F73H B DW CD89H C dw? Data ends CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,A MOV BX,B ADD AX,BX MOV C,AX MOV AH,4CH

实验2 建立运行汇编语言源程序

实验2建立运行汇编语言程序 实验目的: 1.熟悉8088/8086的数据传送和算术运算指令的书写格式、功能。 2.编写源程序,掌握汇编语言程序格式。 3.掌握汇编、连接、运行汇编程序的全过程;使用DEBUG调试和运行汇编程序。 实验内容: 在硬盘E中建立自己的文件夹,以“班级姓名”命名(比如计科1111张三),实验文件以“实验次数-序号”命名,比如sy2-1.asm。 1、有3个内存单元x,,y z,其中x=1234h,y=0c3f6h,z=10c5h,请编写源程序,计算x+2z-y,结果保存在z单元中,并用debug调试运行查看结果,观察标志位变化。 2、写一个完整的源程序,用DEBUG调试运行,查看运行结果。 DATA SEGMENT;定义数据段DATA AUGEND DD99251 SUM DD? DATA ENDS ;请补充语句定义附加段EXTRA,将ADDEND赋值为双精度数-15962 CODE SEGMENT;定义代码段CODE ASSUME CS:CODE,DS:DATA,ES:EXTRA START:MOV AX,DAT MOV DS,AX ;请补充完成给ES赋值的语句,将EXTRA赋值给ES。 ;请补充进行加法运算的语句,把数据段DATA中的AUGEND和附加段EXTRA中的ADDEND相加,并把结果存放在DATA的SUM中。 MOV AX,4C00H INT21H CODE ENDS END START 3、完成实验教程第一章的内容。学习字符串处理指令(课本P75)和DOS显示字符串功能调用(课本P335),理解实验教程例题1.1的程序。 实验报告要求:

ARM汇编语言源程序格式

ARM汇编语言源程序格式ARM汇编语言源程序格式2010-11-16 13:52 来源:MCU嵌入式领域 常用ARM源程序文件类型 汇编语言程序的结构1 汇编语言程序的结构2 汇编语言程序的结构3 汇编语言程序的结构4 ARM的汇编语言程序一般由几个段组成,每个段均由AREA伪操作定义。 段可以分为多种,如代码段、数据段、通用段,每个段又有不同的属性,如代码段的默认属性为READONLY,数据段的默认属性为READWRITE。 本程序定义了两个段,第一个段为代码段codesec,它在存储器中存放用于程序执行的代码以及main函数的本地字符串;第二个段为数据段constdatasec,存放了全局的字符串,由于本程序没有对数据进行写操作,该数据段定义属性为READONLY。 汇编语言的行构成1 格式: [标签]指令/伪操作/伪指令操作数[;语句的注释] 所有的标签必须在一行的开头顶格写,前面不能留空格,后面也不能跟C 语言中的标签一样加上":";

ARM汇编器对标识符的大小写敏感,书写标号及指令时字母的大小写要一致; 注释使用";"符号,注释的内容从";"开始到该行的结尾结束 汇编语言的行构成2 标签 标签是一个符号,可以代表指令的地址、变量、数据的地址和常量。 一般以字母开头,由字母、数字、下划线组成。 当符号代表地址时又称标号,可以以数字开头,其作用范围为当前段或者在下一个ROUT伪操作之前。 指令/伪操作 指令/伪操作是指令的助记符或者定义符,它告诉ARM的处理器应该执行什么样的操作或者告诉汇编程序伪指令语句的伪操作功能。 汇编语言的标号1 标号代表地址。 标号分为段内标号和段外标号。段内标号的地址值在汇编时确定,段外编号的地址值在链接时确定。 在程序段中,标号代表其所在位置与段首地址的偏移量。根据程序计数器(PC)和偏移量计算地址即程序相对寻址。 在映像中定义的标号代表标号到映像首地址的偏移量。映像的首地址通常被赋予一个寄存器,根据该寄存器值与偏移量计算地址即寄存器相对寻址。 例如:

ARM汇编程序设计

cmp r0,#5 bcs aaa add r0,r0,#1 aaa nop cmp r0,#5 addcc r0,r0,#1 bl指令完成两个功能:将子程序的返回地址保存在LR即R14同时将PC的值改为目标子程序的第一条指令的地址。 Start: Mov r0,#10 Mov r1,#3 Bl doadd Mov r1,r1,r0 Doadd Add r0,r0,r1 Mov pc,lr .end 用汇编程序实现IF语句的功能: Mov r0,#15 Mov r1,#12 Cmp r0,r1

Movhi r2,#100 Movls r2,#50 用汇编程序实现FOR循环的功能:Mov r0,#0 Mov r1,#10 Mov r2,#0 L1: cmp r0,r1 Bhs l2 Add r2,r2,#1 Add r0,r0,#1 B l1 L2: .end 用汇编语言实现WHILE循环While(x<=y) X=x*2; mov r0,#1 mov r1,#20 b l2 l1: mov r0,r0, lsl #1 l2: cmp r0,r1 bls l1 end

用汇编语言实现计算算术功能:n equ 100 .global _start -start: .arm arm_code: Ldr sp,=0x40003f00 Adr r0,thumbcode+1 Bx r0 .ltorg .thumb Thumb_code: Ldr r0,=n Bl sum_n B thumb_code Sum_n: Push {r1-r7,lr} Movs r2,r0 Beq sum_end Cmp r2,#1 Beq sum_end Mov r1,#1

汇编语言之程序的基本结构

第6章程序的基本结构在前面几章,我们分别介绍了用汇编语言进行程序设计所需要的几个最基本的知识:内存单元的寻址方式,变量定义和各种汇编指令格式。在掌握了这些基本内容之后,就需要学习如何把它们组成一个完整的汇编语言程序。 6.1 源程序的基本组成 汇编语言源程序的组成部分有:模块、段、子程序和宏等。一个模块对应一个目标文件,当开发较大型的应用程序时,该程序可能由若干个目标文件或库结合而成的。有关模块和子程序的知识和宏在第7章介绍,有关宏的知识将在第9章中叙述。 6.1.1 段的定义 微机系统的内存是分段管理的,为了与之相对应,汇编语言源程序也分若干个段来构成。8086CPU有四个段寄存器,在该系统环境下运行的程序在某个时刻最多可访问四个段,而80386及其以后的CPU都含有六个段寄存器,于是,在这些系统环境下开发的运行程序在某个时刻最多可访问六个段。 不论程序在某个时刻最多能访问多少个段,在编程序时,程序员都可以定义比该段数更多的段。在通常情况下,一个段的长度不能超过64K,在80386及其以后系统的保护方式下,段基地址是32位,段的最大长度可达4G。 段的长度是指该段所占的字节数:

、如果段是数据段,则其长度是其所有变量所占字节数的总和; 、如果段是代码段,则其长度是其所有指令所占字节数的总和。 在定义段时,每个段都有一个段名。在取段名时,要取一个具有一定含义的段名。 段定义的一般格式如下: 段名 SEGMENT [对齐类型] [组合类型] [类别] …;段内的具体内容 … 段名 ENDS 其中:“段名”必须是一个合法的标识符,前后二个段名要相同。可选项“对齐类型”、“组合类型”和“类别”的说明作用请见6.3节中的叙述。 一个数据段的定义例子: DATA1 S EGMENT word1 D W 1, 9078H, ? byte1 D B 21, 'World' DD 12345678H DATA1 E NDS 一个代码段的例子: CODE1 S EGMENT

汇编语言程序编写调试说明.

要在计算机上执行汇编语言程序,其操作步骤如下: 1. 编辑源程序 使用编辑软件将汇编源程序输入到计算机中,建立*.ASM文件。 2.汇编源程序 使用汇编程序将汇编源程序汇编成目标代码文件,即生成*.OBJ 文件。 目前使用较多的汇编程序是宏汇编程序MASM。 C>MASM A1↙ 3. 连接目标程序文件生成可执行文件 生成OBJ文件后,必须用LINK程序连接目标代码程序和库函数代码生成可执行文件,生成的文件的扩展名为EXE。 C>LINK A1↙ 4.程序的执行 建立了EXE文件后,就可以在DOS下直接执行程序了。 C>A1↙ 汇编程序调试工具debug命令: DEBUG调试命令介绍 1.主要调试命令: (1)反汇编命令U:将存储器中的二进制数据翻译成较有意义的助记符形式,以帮助理解,如图1.5所示。一般常用以下三种格式: a)-U↙:从当前IP处开始,对连续约32字节内容反汇编。如对TEST.EXE, 刚装入DEBUG时的IP=0000,则在输入U命令后有如下显示: -U↙ 13C2:0000 B402 MOV AH,02

13C2:0002 B241 MOV DL,41 13C2:0004 CD21 INT 21 13C2:0006 B44C MOV AH,4C 13C2:0008 CD21 INT 21 13C2:000A 8B4606 MOV AX,[BP+06] ……………… 13C2:0020 8B07 MOV AX,[BX] - 图1.5 反汇编命令的执行结果 在上例中,13C2:0000表示CS:IP的内容(其中CS的值是动态值);B402代表该处存放的二进制数据,亦即指令MOV AH,02H的机器代码;当连续约32字节的数据反汇编完后,重新回到DEBUG提示符“-”下,如果再键入U命令,则将继续对后面的内存区反汇编。 特别应该注意的是,由于反汇编命令针对内存区的二进制数据,而被调试程序仅占内存区的某一部分,故反汇编出来的内容并非全是被调试程序的代码,如上例中13C2:000A单元以后的部分,显然不是TEST.EXE的内容。另外还需注意,DEBUG默认使用十六进制。 b)–U 0123↙:从指定的IP=0123处开始,对连续约32字节内容反汇编。 c)–U 0123 0143↙:从指定的IP=0123处开始反汇编,直至指定的0143处 结束。 (2)显示寄存器命令R:显示或修改寄存器的内容,如图1.6所示。一般常用以下形式: a)-R↙:显示所有寄存器当前的内容及当前将执行的指令。如对 TEST.EXE,在程序运行之前,键入R命令: -R↙ AX=0000 BX=0000 CX=000A DX=0000 SP=0000 BP=0000 SI=0000 DI=0000 DS=13B2 ES=13B2 SS=13C2 CS=13C2 IP=0000 NV UP EI PL NZ NA PO NC 13C2:0000 B402 MOV AH,02

实验二_ARM汇编语言程序设计

实验二ARM汇编语言程序设计 实验目的 1、了解ARM汇编语言程序的结构特点 2、了解ARM汇编语言程序的编写方法 3、掌握用ARM汇编语言设计简单程序 实验仪器设备及软件 ARM实验箱,计算机,ADS程序开发软件 实验原理 1、存储空间的格式 ARM920将存储空间视为从0开始由字节组成的线性集合,字节0-3中保存了第一个字,字节4-7中保存了第二个字,依此类推。字节还可以按小端格式或大端格式排列。ARM实验箱中存储器的配置见附录C。 2、ARM的寄存器 ARM状态下任何时刻都可以看到16个通过寄存器(r0-r15),1或2个状态寄存器(CPSR,SPSR),在特权模式下会切换到具体模下的寄存器组。每个寄存器都是32位的,并且每个通用寄存器都可以作为数据处理的源数据或目标数据寄存器。因此可以编写出更精简的程序。 3、ARM指令的条件执行 状态寄存器中的N,Z,C,V是数据处理指令影响的标志。几乎每条ARM指令可以根据状态位或状态位的逻辑运算有条件执行。条件执行的指令后缀参考教材。 4、桶形移器 ARM的桶形移位器,使ARM指令的中第二个操作数非常录活。利用移位器,一条ARM 指令可以完成更多功能。移位操作有: LSL 逻辑左移 LSR 逻辑右移 ASL 算术左移 ASR 算术右移 ROR 循环右移 RRX 带扩展循环右称 实验内容 1、把内存中ramaddr开始的ramword个字清零 (1)用后变址法 ramaddr equ 0x31000000 ramword equ 64 clrram mov r0,#0 mov r1,#ramword ldr r2,=ramaddr clrram1 str r0,[r2],#4 subs r1,r1,#1

汇编语言源程序的编辑与调试过程

汇编语言源程序的编辑与调试过程 1.怎样在TD环境下载入被调试程序? 答:方法1:转到TD.EXE 所在目录,在DOS 提示符下键入以下命令: C:\ASM>TD↙ 进入TD后,按Alt-F键打开File 菜单,选择Open,在文件对话框中输入要调试的程序名,按 回车。 方法2:转到TD.EXE 所在目录,在DOS 提示符下键入以下命令(假定要调试的程序名为HELLO.EXE): C:\ASM>TD HELLO.EXE↙ 方法3:在Windows 操作系统中,打开TD.EXE 所在目录,把要调试的程序图标拖放到 TD 的 图标上。 2.在TD环境下如何编辑汇编指令? 答: (1)用Tab键选择代码区为当前区域; (2)用方向键把光标移到期望的地址处,如果是输入一个新的程序段,建议把光标移到CS:0100H处; (3)打开指令编辑窗口,有两种方法: 一是在光标处直接键入汇编指令,在输入汇编指令的同时屏幕上就会自动弹出指令的临时编辑窗口。 二是用Alt-F10键激活代码区局部菜单,选择其中的汇编命令,屏幕上也会自动弹出指令 的临时编辑窗口。 (4)在临时编辑窗口中输入/编辑指令,每输入完一条指令,按回车,输入的指令即可出现在 光标处(替换掉原来的指令),同时光标自动下移一行,以便输入下一条指令。 3.在TD环境下如何查看/修改数据段的数据? 答: (1)用Tab键选择数据区为当前区域; (2)使用局部菜单中的“Goto”命令并结合使用方向键把光标移到期望的地址单元处(注意数 据区的光标是一个下划线),数据区就从该地址处显示内存单元的内容。 (3)若要修改该地址处的内容,则需打开数据编辑窗口。有两种方法: 一是在光标处直接键输入数据,在输入数据的同时屏幕上就会自动弹出数据编辑窗口。二是用Alt-F10键激活数据区局部菜单,选择其中的“Change”命令,屏幕上也会弹出数据编 辑窗口。 (4)在数据编辑窗口中输入所需的数据,输入完后,按回车,输入的数据就会替代光标处的原 始数据。 4.在TD环境下如何修改寄存器内容? 答: (1)用Tab键选择寄存器区为当前区域; (2)用方向键把光标移到要修改的寄存器上;

汇编语言上机过程

汇编语言上机过程 一、用汇编语言编写的源程序,使之运行必须经过以下几个步骤: 1.用编辑程序建立一个扩展名为.ASM的汇编语言源程序文件。 2.调汇编程序(MASM),对源程序汇编,生成机器码目标文件,扩展名为.OBJ。 3.连接(LINK)目标文件,生成可执行文件,扩展名为.EXE。 4.运行可执行文件。 5.如果程序运行有错,可调用DEBUG程序对.EXE文件进行调试。 二、编辑汇编语言源程序 可用各种编辑软件来建立汇编语言源程序,例如记事本。先保存为.TXT文件,然后改为.ASM文件,方法是在windows界面:工具——文件夹选项——查看——将“隐藏已知文件的扩展名”选项去掉。然后将扩展名.TXT直接改为.ASM,汇编程序文件名称由用户自定(只能用英文字母、数字下划线)。 三、编译汇编语言源程序 用MASM程序汇编源程序,生成浮动目标程序(即扩展名为.OBJ的文件),这里产生的是浮动的目标模块,是不可执行程序。 “开始”菜单->运行->键入“cmd”->确定,打开DOS命令行窗口。 汇编前,在DOS状态下用下列命令可以打开源程序,例如打开z1.asm的方法是:>type z1.asm<CR> 则屏幕上显示出z1.asm的源程序。 汇编z1.asm文件过程的屏幕操作与显示如下: >masm z1.asm<CR> 屏幕显示以下各行(一次一行),提示用户所应键入的信息: OBJECT FILENAME[Z1.OBJ]<CR> SOURCE LISTING[NUL.LST]:<CR> CROSS REFERENCE[NUL.CRF]:<CR> 产生目标文件(.OBJ)是汇编的主要目的,通常用户可以直接回车,表示采用默认文件名。(.LST)文件为列表文件,提供全部汇编后的信息。若用户不需要这些信息,可直接回车。(.CRF)文件为交义引用文件,要建立交叉引用文件,则键入文件名。MASM将为用户建立扩展名为(.CRF)的交叉引用文件,这里所得到的交叉引用文件,必须调用CREF程

汇编语言上机操作及程序调试的方法

汇编语言上机操作及程序调试的方法第一节在IBM-PC机上运行汇编源程序所必备的软件 为了在IBM-PC机上运行汇编源程序,机器上必须有DOS操作系统环境,DOS系统盘上应有下列文件: EDIT 文件编辑程序 MASM 宏汇编程序 CREF 交叉引用文件处理程序 LINK 链接程序 LIB 库管理程序 DEBUG 调试程序 第二节在IBM-PC机上运行汇编源程序的步骤 当用户编制好汇编语言源程序之后,要在机器上运行,必须经过以下几个步骤: 1.用EDIT命令建立与修改汇编源程序文件(ASM文件) 源程序就是用汇编语言的语句编写的程序,它不能被机器识别。源程序必须以ASM为附加文件名。至于EDIT的使用方法可以查阅手册。 2.用MASM命令汇编源文件以产生相应的目标文件(OBJ文件)源程序建立以后,必须经过汇编,转换成用二进制代码表示的目标文件,机器才可运行。汇编是通过调用PC—DOS下的宏汇编程序MASM实现的。汇编过程中,汇编程序对源文件进行二次扫描,如果源程序中有语法错误,则汇编过程结束后,汇编程序会指出源程序中的错误,这时,用户可以再用编辑程序来修改源程序中的错误,最后,得到没有语法错误的OBJ文件。 3.用LINK命令连接目标文件以产生可执行文件(EXE文件)由于汇编之后所得到的目标代码的存放地址并不是可执行的绝对地址,而是浮动的相对地址,因而,必须经过连接,把程序的各个模块连接在一起,或把要调用的子程序与主程序连接在一起,把相对地址变成绝对地址,形成可执行的文件。连接是由调用PC—DOS下的LINK程序来实现的。 4.调试、运行可执行文件。 经过以上过程,在盘上有了可执行文件,则可在DOS提示符下,直接打入文件名(不用扩展名),就可以把执行文件从盘上装入内存,且立即执行此程序。

汇编语言程序设计的实验环境及上机步骤

第1章汇编语言程序设计实验 1.1 汇编语言程序设计的实验环境及上机步骤 1.1.1 实验环境 汇编语言程序设计的实验环境如下。 1.硬件环境 微型计算机(Intel x86系列 CPU)1台。 2.软件环境 ·Windows 98/XP/Me/2000操作系统; ·任意一种文本编辑器(EDIT、NOTEPAD(记事本)、UltraEDIT等); ·汇编程序(MASM.EXE或TASM.EXE); ·链接程序(LINK.EXE或TLINK.EXE); ·调试程序(DEBUG.EXE或TD.EXE)。 本书建议文本编辑器使用EDIT或NOTEPAD,汇编程序使用MASM.EXE,链接程序使用LINK.EXE,调试程序使用TD.EXE。 1.1.2 上机步骤 汇编语言程序设计的实验2和实验3仅使用TD.EXE,关于TD.EXE的使用方法请参见附录B。下面介绍的上机实验步骤适用于除实验2和实验3的所有实验(包括硬件接口部分的全部实验)。 1.确定源程序的存放目录 建议源程序存放的目录名为ASM,并放在C盘或D盘的根目录下。如果没有创建过此目录,请用如下方法创建。 通过Windows的资源管理器找到C盘的根目录,在C盘的根目录窗口中单击右键,弹出的菜单中选择“新建”→“文件夹”,并把新建的文件夹命名为ASM。 请把MASM5文件夹下的所有文件及TD.EXE都复制到此目录中。 2.建立ASM源程序 建立*.ASM源程序可以使用记事本文本编辑器。注意:保存时扩展名必须ASM。设建立的源文件为HELLO.ASM 3.用MASM.EXE汇编源程序产生OBJ目标文件 源文件HELLO.ASM建立后,要使用汇编程序对源程序文件汇编,汇编后产生二进制的目标文件(.OBJ文件)。具体操作如下: 方法一:在Windows中操作 用资源管理器打开源程序目录C:\ASM,把HELLO.ASM拖到MASM.EXE程序图标上。 方法二:在DOS命令提示符窗口中操作 选择“开始”→“程序”→“附件”→“命令提示符”,打开DOS命令提示符窗口,然后用CD命令转到源程序目录下,接着输入MASM命令: I:>C:<回车> C:>CD\ASM<回车> C:\ASM>MASM HELL0.ASM<回车> 操作时的屏幕显示如图1所示。

汇编语言的编程步骤与调试方法

汇编语言的编程步骤与调试方法 一、汇编源程序的建立 1. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于

调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试

汇编语言程序设计习题答案

钱晓捷新版汇编语言程序设计习题答案 第一章汇编语言基础知识 1.1、简述计算机系统的硬件组成及各部分作用 1.2、明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 1.3、什么是汇编语言源程序、汇编程序、目标程序? 1.4、汇编语言与高级语言相比有什么优缺点? 1.5、将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1.6、将下列十进制数转换为BCD码表示 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 1.7、将下列BCD码转换为十进制数 (1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010 1.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示 (1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 1.9、完成下列二进制数的运算 (1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001 (5)1011 ∧~1011 (8)1011 ⊕1001 1001(6)1011 ∨1001(7) 1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符? 1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符? 1.12、简述Intel 80x86系列微处理器在指令集方面的发展。 1.13、什么是DOS和ROM-BIOS? 1.14、简述PC机最低1MB主存空间的使用情况。 1.15、罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。1.16、什么是标志,它有什么用途?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。

相关文档
最新文档