汇编语言第3次实验报告编译及伪指令功能分析
汇编语言指令及伪指令练习的实验报告总结(范文)
汇编语言指令及伪指令练习的实验报告总结汇编语言指令及伪指令练习的实验报告总结篇一:汇编语言实验报告福建农林大学金山学院课程名称:姓名:系:专业:年级:学号:指导教师:职称: (程序设计类课程) 实验报告汇编语言 201X~201X学年第二学期实验项目列表福建农林大学金山学院实验报告系:专业:年级:姓名:学号:实验课程:汇编语言实验室号:_ _1#605 实验设备号: I3 实验时间:201X.4.25指导教师签字:成绩:实验一汇编程序的汇编及运行1.实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程;(2)生成LST文件,查看L ST文件;(3)生成BJ文件,修改语法错误;(4)生成EXE文件;(5)执行程序。
2.实验环境 IBM—PC机及其兼容机;实验的软件环境是:操作系统: DS2.0以上;调试程序: DEBUG.CM;文本编程程序: EDIT.EXE、PS.EXE;宏汇编程序:MA SM.EXE(或AS M .EXE);连接装配程序:L INK .EXE;交叉引用程序:CREF.EXE(可有可无)。
3.实验内容及实验数据记录(1)将数据段输入,取名 1.txt,保存在MASM文件夹下。
生成LST文件,(不必连接、运行)用EDI T查看1.LS T文件。
试回答: DA1,DA2的偏移量分别是多少?C UNT的值为多少?DATA SEGME NT RG 20HNUM1=8 NUM2=NUM1+10H DA1 DB ‘I BM PC’ CUN T EQU $-DA1 DATA END S DA2 DB 0AH, 0DH EN D(2)输入有错误的文件,修改错误语句。
(MASM没有出现错误即可。
不必连接、运行。
)D ATA SEGMEN T VAR1 DB0, 25, DH,300 VAR2DB 12H, A4H, 6BH VAR3 DB ’ABCD EF’ VAR4 D 1H, 5678H VAR5 D 10H DUP(?) D ATA ENDS C DE SEGMENT ASSUME CS: CDE, DE: DATA MV D S, AX LEASI, VAR5 M V BX, FFSE T VAR2 MV[SI], 0ABH MV AX, VA R1+2 MV [B X], [SI] M V VAR5+4,VAR4 MV AH, 4CH INT21H ENDS E ND START B EING MV AX, DATA CDE(3)输入正确的程序,汇编、连接、运行 STACKS SEGMENT S TACK D 128DUP(?) EN DS SEGMENT ENDS SEGM ENT ASSUME CS: CDES,DS: DATAS STACKS DA TAS DATASCDES STRIN G DB ‘ELCM E!’, 13, 10, ‘$’ STA RT: MV AX, DATAS MV DS, AX LEA DX, S TRING MV A H, 9 INT 21H MV AH,4CH INT 21H CDES END S END STAR T4.算法描述及实验步骤 1)首先,用记事本输入各段程序,并储存成源程序,保存在MASM目录下。
汇编伪指令和编译出错说明
汇编伪指令和编译出错说明ASM-51 宏汇编使用手册A51与ASM51基本相同ASM-51 宏汇编主要用来开发Inter8051系列单片机,它具有宏处理,数据处理,列表处理和条件处理等多种功能。
源程序的编写完全采用 Inter标准助记符和行格式。
在编写程序过程中,可借助于文本编辑(Windows的记事本)或文字处理软件Word等编辑,经ASM-51汇编后生成列表输出文件(.LST)和目标代码文件(.HEX)。
此目标代码文件(.HEX)可直接用CZS-51或MedWin、Keil、Debug8051进行模拟/调试,或直接用于硬件仿真器上运行。
当然,这也是要烧写到单片机ROM中的代码。
1、宏汇编语言的基本语法1、1 宏汇编的特点ASM-51宏汇编完全支持Inter助记符的汇编语言,它含有宏语句,英文大小写字母,变量名,标号等不受限制,有二,十,十六进制和串参数类型,有汇编控制指令和多层条件语句,程序逻辑分段,还有模块化程序设计的连接功能,汇编速度快等特点。
1、2 汇编处理过程(1) 用行编辑EDLIN或文字处理软件WS或全屏幕编辑软件PE等,编辑宏汇编语言源程序,它的文件扩展名为。
ASM。
(2) 用ASM-51宏汇编程序对上述源程序文件进行汇编,产生扩展名为.LST的列表输出文件和扩展名为.HEX的目标代码文件(.HEX)。
列表输出文件包含源程序语句所汇编成的代码,以及有关的地址,语句和符号表等。
目标代码文件包含源程序语句所汇编成的代码,不包含任何符号信息或助记符。
进行模拟/调试,或直接用于硬件仿真器上运行。
1、3 语句汇编语言可分为两类语句:指令性语句和指示性语句。
(1)指令性语句这一类语句是指在汇编过程中能生成指令代码的语句(如MOV ,DEC等)。
其格式为:[标号:] [指令助记符] [操作数] [;注释]其中方括号[ ]中为选择项。
下同。
(2)指示性语句这一类语句即通常所说的伪指令,它指示汇编程序后面的指示性语句如何产生代码。
汇编语言实验报告三
汇编语言实验报告(实验三)一.实验目的1.掌握程序设计中的子程序结构;2.熟练使用过程伪指令、子程序调用和返回等汇编语言的指令编写子程序;3.掌握数制转换方法;4.掌握利用DOS系统功能调用进行字符输入及字符输出(显示)的方法。
二.程序说明1.编写十进制到十六进制转换程序。
要求从键盘取得一个十进制数,然后把该数以十六进制形式在屏幕上显示出来2.已知从BUF开始存放了10个16进制字数据,编程求出这10个数中的最大数,(将最大数存入MAX字节单元),并将其以10进制数的形式在屏幕上显示出来。
(提示:以上两题都要求采用子程序的方法)3.从键盘上输入一行字符,如果这行字符比前一次输入的一行字符长度长,则保存该行字符,然后继续输入另一行字符;如果它比前一次输入的行短,则不保存这行字符。
按下‘$’输入结束,最后将最长的一行字符显示出来。
(选作)(提示:定义数据段,包括两个变量STRING和BUFFER,格式如下:STRING DB 0 ;存放字符的个数DB 80 DUP (?), 0DH,0AH,‘$’;存放前一次输入的字符串,兼作显示缓冲区BUFFER DB 80 ;输入字符串的缓冲区,最多输入80个字符DB ?DB 80 DUP (20H)然后利用0AH号DOS系统功能调用收入字符,用09H号系统功能调用输出。
)三.设计思想1.先调用子函数decibin由键盘输入一个数字后,先减去30h把ASCII码形式转换为十进制数形式,保存在bx中,再调用子函数binihex,用十六进制形式显示bx中的数。
2.利用子函数max依次比较,将buf中10个字的最大值放到bx中,再一次除以10000,1000,100,10,并分别把余数放到bx,商放到dl,并转换为ASCII码格式,即把十六进制转为10进制,最后调用2号功能输出结果即可。
3.调用0ah功能,将输入字符放到缓冲区,并把之后输入的字符串依次与缓冲区内容相比较,若小于缓冲区内容,则被替换,直到输入$即停止输入字符串为止,输出最终存放在string 中的字符串的内容。
《汇编语言》学习笔记6——伪指令
《汇编语⾔》学习笔记6——伪指令1.伪指令⼜称伪操作,即不能像汇编指令⼀样⽣成可执⾏的⼆进制机器代码,⽽是在汇编程序对汇编语⾔源程序进⾏汇编(编译)期间,由汇编程序执⾏。
它与C中的说明性语⾔的含义类似,起到说明作⽤,⽤来指出程序分段、数据定义、存储分配、程序开始和结束等信息,这些信息在汇编(编译)完成后就不⽤了。
但程序中没伪指令,则系统就⽆法完成编译。
2.段定义伪指令:⽤来定义各种类型的段 1.格式:段名 SEGMENT [类型参数] ...... 段名 ENDS 1.其中SEGMENT和ENDS必须成对出现,表⽰段的开始和结束。
⼀般的,段名和段的意义⼀致,便于识别。
2.段名实际就是段地址,在汇编过程中,系统给出具体的地址值,⼀个段必须有⼀个名字来标识。
3.参数是可选项(可有可⽆),⽤于指出段的边界、段的组合、类别标识,⼀般⽤于多模块程序设计中。
2.类型参数 1.定位类型 PARA 该段的起始地址必须为⼩段的⾸地址,即起始地址的16进制数最低位为0 BYTE 该段可以从任意地址开始 WORD 该段必须从字边界开始,即起始地址为偶数 DWORD 该段必须从双字边界开始,即起始地址的16进制数为最低应为4的倍数 PAGE 该段必须从页边界开始,即起始地址的16进制数最低两位为00(能被256整除) 若不指定定位类型,系统默认为PARA 2.组合类型 PRIVATE 该段为私有段,连接时不与其他同名段合并 PUBLIC 连接时可与其他模块中的同名段按顺序连接成⼀个段 COMMON 表⽰该段与其他模块中的同名段有相同的起始地址,如果连接将产⽣覆盖,连接后段的长度为同名段中的最长者 STACK 表⽰该段为堆栈段 AT 表达式 该段直接定位在表达式指出的位置上 若不指定组合类型,默认为PRIVATE 3.类型标识:在引号中给出段的类型名。
在连接时,类别标识相同的段放在连续的存储区中。
(如:"STACK"⽤啦标识该段为堆栈段) 4.END:结束标记,若碰到伪指令END则停⽌编译3.ASSUME伪指令:⽤于指明段寄存器与段的对应关系 1.格式:ASSUME 段寄存器:段名,[段寄存器:段名,段寄存器:.....]【[]中标识可选项】 2.除了代码段寄存器CS不能⽤MOV指令赋值外,其他段寄存器都可⽤MOV指令进⾏初始化。
8086汇编语言伪指令
一、伪指令详解伪指令在百度百科中的定义为:伪指令(Pseudo Instruction)是用于对汇编过程进行控制的指令,该类指令并不是可执行指令,没有机器代码,只用于汇编过程中为汇编程序提供汇编信息。
例如,提供如下信息:哪些是指令、哪些是数据及数据的字长、程序的起始地址和结束地址等。
伪指令有2个特点:1.由于是伪“指令”,因而它只存在于汇编语言中。
高级语言中不叫指令,叫语句;2.由于是“伪”指令,也即“假”指令,因而不是可执行指令,不会产生机器代码,不会占用ROM空间,只用于汇编过程中为汇编程序提供汇编信息。
与指令的区别::1.指令是在执行阶段发挥作用的,由CPU(Intel、AMD等)来执行。
2.伪指令是在编译阶段发挥作用的,由汇编器(MASM、TASM等)来解释。
二、数据定义伪指令为源程序中的数据和堆栈区分配数据存储单时,使用最多的伪指令。
数据定义伪指令格式如下:常用的数据定义伪指令类型有:∙DB(定义字节,常用)一个字节数据占1个字节单元,读完一个,偏移量加1∙DW(定义字,常用)一个字数据占2个字节单元,读完一个,偏移量加2∙DD(定义双字)一个双字数据占4个字节单元,读完一个,偏移量加4∙DQ(定义四字)一个四字数据占8个字节单元,读完一个,偏移量加8∙DT(定义十字节,用于BCD码)数据定义伪指令后面的初值表可以是常数、表达式、字符串。
例如:D2DW110*230;为D2分配1个字,存放表达式的值D3DB‘GOOD!’;为D3分配5字节,用来存放字符串‘GOOD!’D4DD2.4E+3;为D4分配2个字,存放一个浮点数D5DB‘AB’;为D5分配2字节,字符A在低字节,B在高字节D6DW‘AB’;为D6分配1个字,字符A在高字节,B在低字节S1DB5DUP(?);为S1预留5字节的存储空间S2DW3DUP(0);为S2分配3个字,初值设为0语句1相当于C语言中的DW D2=110*230,只不过是语法结构不太一样注意:通过变量名操作时,变量名代表存储区的第一个数据的地址。
汇编语言(王爽第三版)实验3编程、编译、连接、跟踪
汇编语⾔(王爽第三版)实验3编程、编译、连接、跟踪实验3 编程、编译、连接、跟踪(1)将下⾯的程序保存为t1.asm⽂件,将其⽣产可执⾏⽂件t1.exe。
assume cs:codesgcodesg segmentmov ax, 2000Hmov ss, axmov sp, 0add sp, 10pop axpop bxpush axpush bxpop axpop bxmov ax, 4C00Hint 21Hcodesg endsend(2)⽤debug跟踪t1.exe的执⾏过程,写出每⼀步骤执⾏后,相关寄存器中的内容和栈顶的内容。
(3)PSP的头两个字节是CD 20,⽤debug加载t1.exe,查看PSP的内容。
实验结果:【1】编译、连接t1.asm汇编源程序。
1)在windows XP中,打开cmd窗⼝,编译t1.asm程序。
如下图:E:\assembly>masm t1.asmMicrosoft (R) MASM Compatibility DriverCopyright (C) Microsoft Corp 1993. All rights reserved.Invoking: ML.EXE /I. /Zm /c /Ta t1.asmMicrosoft (R) Macro Assembler Version 6.15.8803Patched for you by promethee [ECL] in the year 2001 - enjoyCopyright (C) Microsoft Corp 1981-2000. All rights reserved.Assembling: t1.asm如果没有任何错误,编译器会⽣成⼀个t1.obj的⽂件。
如果有语法等严重的错误,编译器会给出错误信息,你可以根据错误信息,修改源代码相关的⾏。
连接这个obj⽂件,并⽣成t1.exe⽂件:如下图:E:\assembly>link t1.objMicrosoft (R) Segmented Executable Linker Version 5.60.339 Dec 5 1994Copyright (C) Microsoft Corp 1984-1993. All rights reserved.Run File [t1.exe]: t1.exeList File [nul.map]:Libraries [.lib]:Definitions File [nul.def]:LINK : warning L4021: no stack segmentLINK : warning L4038: program has no starting address连接讲解:1)其中运⾏⽂件:我们输⼊我们将要⽣成的可执⾏程序(例如.exe)⽂件的名称。
汇编语言程序设计上机实验报告(实验三)-循环程序设计
汇编语言程序设计上机实验报告(实验三)一、实验题目、内容及要求:一、实验题目、内容及要求:题目:循环程序设计内容:编写一程序,要求从键盘接收一个4位十六进制数,在终端上显示与它等值的二进制数。
二进制数。
要求:实验前要作好充分准备,包括程序清单、调试步骤、调试方法,对程序结果的分析等。
本实验要求在EDIT 下编写完整的汇编语言程并生成可执行文件运行。
下编写完整的汇编语言程并生成可执行文件运行。
二、实验时间及地点二、实验时间及地点日期:日期: 2011/11/21 节次:节次: 7.8 地点:地点:电子实验楼二楼电子机房电子实验楼二楼电子机房 三、实验目的三、实验目的通过本实验掌握DOS 系统功能调用功能,掌握循环程序设计的方法;学会编写循环结构程序。
构程序。
简述在实验过程中遇到的问题和解决的方法:简述在实验过程中遇到的问题和解决的方法:1、问题:遇到死循环解决方法:程序显示disp 中发现执行int int 21h 21h 会修改al 的值,避免这种情况的方法就是使用堆栈段。
2、问题:调试中出现no data segment 解决方法:start 开始时没有将数据段的IP 地址赋给dx 。
data segment 3、问题:可执行,结果为乱码解决方法:数据划分比较的粗,没有系统的将数据系统划分。
系统划分:<30h other 30h-39h num 39h-41h other 41h-46h big zi mu 46h-61h other 61h-67h small zi mu >67h other 运行结果:(要求用“抓图软件”抓程序的运行结果)(要求用“抓图软件”抓程序的运行结果)结果分析及实验体会:结果分析及实验体会:1、结果0001001000110100是十六进制数1234转化而来。
十六进制数通过ASCII码对照转换为二进制数。
A~F----- -57hA~ f----- -57h0~9 ------ -37h2、学习应用了循环指令并了解了其特点:A、循环指令不影响标志位B、其功能为使寄存器CX的值减1,如果结果不等于0,则循环至标号,否则顺序执行。
3-3 汇编伪指令
MAC *AR3+,*AR4+,A ;执行乘法并累加,结果放在A中
STL A,@y ;将A的低字内容送结果单元y
RET
;结束子程序
.end
;结束全部程序
No Assembly Errors, No Assembly Warnings
Field 4:
源程序语
17
句
(4)列表文件——段定义举例
例4-4 2 3
000001 0000
16 000002 7718
STM #STACK+10h,SP ;设置堆栈指针初值
000003 001017 000004 7711
000005 000018 000006 EC07
源文件的每一行都会在列表文件 STM #a,A中R1生成;A一R1行指向。a包的地括址行号、段程序 RPT #7 计数器;从S程P序C的存储数器值向、数据汇存编储后器 的目
;;;为为定源结F变义i果e量程标l句dyx号序分4分:语配配41个个单单元元的的空空间间15
一条指令可以生成1或2个字的目标代码。
11 000000
.data
;定义数据代码段
12 000000 0001 table: .word 1,2,3,4 ;在标号table开始的8个单元中
000001 0002 000002 0003 000003 0004
;定义数据代码段
;在标号table开始的8个单元中
;为这8个单元赋初值
13
(3)段程序计数器(SPC)
作用 表示一个程序代码段或数据段的当前地址
编址 过程
一开始,汇编器将每个SPC置0。当汇 编器将程序代码或数据加到一个段内 时,相应的SPC就增加。如果再继续对 某个段汇编,则相应的SPC就在先前的 数值上继续增加。链接器在链接时要 对每个段进行重新定位。
(完整版)汇编语言中常用的伪指令档
汇编语言中常用的伪指令分类:软件相关2013-01-23 20:13 515人阅读评论(0) 收藏举报areaequ伪指令常用汇编语言汇编语言中,指令语句在源程序汇编时会产生可供计算机执行的指令代码,即目标代码。
汇编程序除指令语句外,还需要提供一些指令,用于辅助源程序的汇编。
比如指定程序或数据存放的起始地址,为数据分配一段连续的内存单元等。
这些指令在汇编时并不生成目标代码,不影响程序执行,因此称之为伪指令。
本文简单总结了常用的伪指令,如下。
1、EQU(Equate)一般格式为:标号:EQU 操作数指令功能为将操作数赋予标号,两边的值完全相等。
使用EQU伪指令给一个标号赋值后,此标号在整个源文件中值固定。
AREA: EQU 1000H ;将标号AREA赋值为1000H2、ORG(Origin)一般格式为:ORG xxxxH(绝对地址或标号)XxxxH决定此语句后第一条指令(或数据)的地址。
该段源程序或数据被连续存放在此后的地址内,直到下一条ORG指令为止。
ORG 8000H ;此后目标代码存储在存储器中以0x8000h开始的地址空间中。
ADD R1,#1MOV R2, #23、DB(Define Byte)一般格式为:标号:DB 字节常数或字符或表达式标号字段可有可无,字节常数或字符是指一个字节数据。
此伪指令的功能是把字节常数或字节串存放至内存连续的地址空间中。
ORG 8000HDATA1:DB 43H,09H,08HDATA2:DB 07H伪指令DB指定了43H,09H,08H 顺序存放在8000H开始的存储单元中,DATA2中的07H紧挨着DATA1的地址空间存放,即07H存放在8003H单元中。
注:DW(Define Word)指令定义与DB类似,区别在于DW定义一个字,DB定义一个字节。
4、END一般格式为:标号:END 地址或标号地址或标号可以忽略。
此伪指令用于指示汇编语言程序段结束。
因此一个源程序中仅有一个END,且一般放在程序最后。
3.2 汇编语言程序设计伪指令
2012-2-29
单片机原理及其应用
11
7.2 算术运算程序的设计
+
DA A DA A DA A
图7.3 多位十进制加法算法
2012-2-29
单片机原理及其应用
12
7.2 算术运算程序的设计
例4 多位十进制减法 在第3章的例30中,我们介绍了2位十进制数减 法算法:X-Y=X+100-Y→ X+9AH-Y,把十进 制减法变换成二进制减法(求十进制减数的补码) 和十进制加法2步进行。多位十进制数减法也采用了 同样的算法。设被减数存放在20H开始的内部RAM 存储单元,减数存放在30H开始的存储单元,6位十 进制数减法的程序如下
15
7.2 算术运算程序的设计
例5 多字节数二进制乘法 2个多字节二进制数乘法的算法与按位进行十进 制数乘法相似。把它转换为几个多字节与单字节的 乘法运算,先分别计算出它们的部分积,然后按照 规则把部分积累加计算出乘积。 图7.4为2个16位二进制数相乘的算法原理图。 图中被乘数为X,其高八位和低八位分别存储在XH 和XL单元,乘数为Y,YH和YL分别高八位和低八位 存储单元。
2012-2-29
单片机原理及其应用
16
7.2 算术运算程序的设计
算法分2步进行:首先,分别用乘数的高八位和 低八位与被乘数相乘,计算部分积,分别存储在 (XYH3),(XYH2),(XYH1)和 (XYL3),(XYL2)(XYL1)单 元;在编写程序时,乘法运算可以用子程序调用的 方法实现(第3章例33)。第二步,采用加法运算求 出乘积存储在(XY4)(XY3)(XY2)(XY1)单 元。
微机原理与接口技术4-3汇编语言中的伪指令
…..
4.5 汇编语言程序设计
4.5.1 汇编语言程序设计基本步骤
编制汇编语言程序的步骤:
1. 2. 3.
明确任务,确定算法; 绘制流程图; 根据流程图编写汇编程序语言;
4.
上机调试。
4.4 汇编语言程序设计
4.4.2 汇编语言程序的基本结构
程序的基本结构有四种:
顺序结构 分支结构 循环结构
DATA START : MOV AX ,DATA MOV DS ,AX MOV AL ,30H ADD AL ,20H MOV BL ,80H MUL BL MOV BX , 185H SUB DX , DX DIV BX MOV S , AX MOV S + 2 , DX CODE ENDS END START
Y
AX = 0 ?
N
逐位移到最高位
CF = 1 ?
Y
N
CX+1 继续
根据条件控制循环
结束
根据状态控制循环
BEGIN :IN AL ,52H ;从状态口读 TEST AL ,02 ;测试 D1 = 0 ? JZ BEGIN ;D1 = 0 转,继续查 IN AL ,50H ;D1 ≠ 0,数据口 Y MOV [DI] ,AL ;存内存 INC DI
分支结构(CASE结构即选择结构)。
2 分支程序设计
双分支程序 例1:已知在内存中,有一个字节单元X存有带符号 数据,计算出它的绝对值后并放入RESULT单元中。
多分支程序
例2:编程计算下列函数的值:
1
Y= 0 -1
(X>0)
(X=0) (X<0)
3 循环程序设计
当要进行多次重复操作时采用循环设计。常见的循环程序结构有 两种:WHILLE_DO结构和DO_UNTIL结构,结构框图如下:
汇编语言伪指令解析
BEGIN: MOV AX,DATA
MOV DS,AX
LEA DX,STR
MOV AH,9
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
汇编语言伪指令解析
汇编语言的 一个实例P81
2
一、汇编语言源程序的基本结构
完整的汇编语言源程序由段(代码段、数据段、附 加段或堆栈段)组成;一个汇编语言源程序必须包 含一个代码段,并指示程序执行的起始点,一个程 序只有一个起始点。数据段、堆栈段和附加段视情 况而定。
每个段由若干语句行组成。语句行是汇编的编程基 础。所有的指令必须位于某一个代码段内,伪指令 可根据需要位于任一段内。
段以“SEGMENT”开始,以“ENDS”结束。段由用 户定义。
汇编语言伪指令解析
3
二、汇编语言源程序中的语句
1、语句的分类 2、语句的格式
汇编语言伪指令解析
4
1、汇编源程序中语句的分类
汇编语言伪指令解析
10
TEST
例:测试为0或1
若要检测AL中的最低位是否为1,若为1则转移。
test al,01h ;测试AL的最低位D0
jnz there ;标志ZF=0,即D0=1
;则程序转移到there
...
;否则ZF=1,即D0=0,顺序执行
there: ...
汇编语言伪指令解析
11
三、常量、变量、标号与表达式(续)
操作数 操作数
[;注释] [;注释]
共同点:每一语句行都由4部分组成,各部分之 间至少要用一个空格作为间隔。
不同点:
在形式上:带不带冒号,是否可转向它。
在本质上:汇编时能否形成对应的机器码。
arm汇编伪指令详解(转载)
arm汇编伪指令详解(转载)4.1 ARM汇编器所⽀持的伪指令在ARM汇编语⾔程序⾥,有⼀些特殊指令助记符,这些助记符与指令系统的助记符不同,没有相对应的操作码,通常称这些特殊指令助记符为伪指令,他们所完成的操作称为伪操作。
伪指令在源程序中的作⽤是为完成汇编程序作各种准备⼯作的,这些伪指令仅在汇编过程中起作⽤,⼀旦汇编结束,伪指令的使命就完成。
在ARM的汇编程序中,有如下⼏种伪指令:符号定义伪指令、数据定义伪指令、汇编控制伪指令、宏指令以及其他伪指令。
4.1.1 符号定义(Symbol Definition)伪指令符号定义伪指令⽤于定义ARM汇编程序中的变量、对变量赋值以及定义寄存器的别名等操作。
常见的符号定义伪指令有如下⼏种:— ⽤于定义全局变量的GBLA、GBLL和GBLS。
— ⽤于定义局部变量的LCLA、LCLL和LCLS。
— ⽤于对变量赋值的SETA、SETL、SETS。
— 为通⽤寄存器列表定义名称的RLIST。
1、 GBLA、GBLL和GBLS语法格式:GBLA(GBLL或GBLS)全局变量名GBLA、GBLL和GBLS伪指令⽤于定义⼀个ARM程序中的全局变量,并将其初始化。
其中:GBLA伪指令⽤于定义⼀个全局的数字变量,并初始化为0;GBLL伪指令⽤于定义⼀个全局的逻辑变量,并初始化为F(假);GBLS伪指令⽤于定义⼀个全局的字符串变量,并初始化为空;由于以上三条伪指令⽤于定义全局变量,因此在整个程序范围内变量名必须唯⼀。
使⽤⽰例:GBLA Test1 ;定义⼀个全局的数字变量,变量名为Test1Test1 SETA 0xaa ;将该变量赋值为0xaaGBLL Test2 ;定义⼀个全局的逻辑变量,变量名为Test2Test2 SETL {TRUE} ;将该变量赋值为真GBLS Test3 ;定义⼀个全局的字符串变量,变量名为Test3Test3 SETS “Testing” ;将该变量赋值为“Testing”2、 LCLA、LCLL和LCLS语法格式:LCLA(LCLL或LCLS)局部变量名LCLA、LCLL和LCLS伪指令⽤于定义⼀个ARM程序中的局部变量,并将其初始化。
汇编语言第3次实验报告编译及伪指令功能分析
·四川大学计算机学院、软件学院实验报告学生姓名学号班级学生专业计算机科学与技术学院计算机学院课程名称汇编语言程序设计(第三次)实验时间2010年11月16日实验项目编译及伪指令功能分析报告撰写时间2010年11月16日实验目的①②用TD观察标号、常量和变量编译后的结果,加深对伪指令行为的理解;③用TD观察编译程序对标号及变量名的自动管理;④观察和理解系统对段寄存器及IP及SP的管理。
实验环境①X86系列桌面系统;②UltraEdit-32、TASM、TLINK、TD。
实验内容按实验代码asmtest.asm中的10个步骤完成相关内容,并做记录。
实验记录①目标代码数据段常量bits定义语句的编译结果是不留痕迹,说明常量不分配储存空间。
②目标代码常量bits引用语句的编译结果0ACH ,对应的寻址方式是直接寻址方式。
③目标代码标号lop定义语句的编译结果是不留痕迹,说明没有为标号分配储存空间。
④目标代码标号lop引用语句的编译结果:0FAH ,本质上该值是:目标语句的ip和当前执行语句的差值。
⑤将两nop语句的注释开,编译后目标代码标号lop引用语句的编译结果是0F8 ,这体现了编译程序对标号的自动管理功能。
⑥目标代码变量x在定义语句的编译结果:偏移量为0000H ;初值为08H 。
⑦目标代码变量x在引用语句的编译结果0000H ,对应的寻址方式是直接寻址方式。
⑧将变量定义语句y的注释打开,目标代码变量x的偏移量被更改为为0200H ,这体现了编译程序对变量的自动管理功能。
⑨实验代码要求注释的四个位置应注释为:显示x的偏移量。
显示x的值。
显示标号Next的段基址的高16位显示标号Next的偏移量的教师评议成绩评定:指导教师签名:。
汇编语言程序格式、伪指令
第4章 汇编语言程序设计
主要内容:
汇编语言源程序的结构 汇编语言语句格式 伪指令 功能调用 汇编语言程序设计
1
微机与接口技术
4.1 汇编语言源程序
1.机器语言(Machine Language)
用二进制表示指令和数据。 优点:执行速度快,占有内存少。 缺点:不直观,不易编写、阅读和理解,面向硬件,不 能移植。
MASM
汇编程序
PRODR.OBJ 文件
Link
连接程序
PRODR.EXE 文件
汇编语言程序的建立及汇编过程
4
微机与接口技术
上机过程: 1.调用编辑程序(例如:记事本)建立源文件。 以×××.asm命名文件。 2.用汇编程序masm(或asm)对源文件汇编产生目标文件 ×××.obj。 如果汇编出错则需重新调用编辑程序修改错误,直至汇编 通过为止。
2.汇编语言(Assembly Language)
用助记符书写指令,地址和数据也可用符号表示。 优点:编写、阅读和修改较方便,不易出错,执行速度与机 器语言相近。 缺点:面向硬件,不能移植。
2
微机与接口技术 汇编:把汇编语言源程序翻译成机器语言目标程序的过程。 汇编程序:完成汇编工作的系统软件。 •小汇编(ASM):需要64K内存支持 •宏汇编(MASM):需要96K以上的内存支持,功能更强。 汇编程序的主要功能: 1)检测源程序。 2)测出源程序中的语法错误,并给出出错信息。 3)产生源程序的目标程序,并给出列表文件。 4)展开宏指令。
24
微机与接口技术
(2) 逻辑运算符 AND、OR、XOR、NOT:只用于数值表达式 注:逻辑运算符和逻辑指令的区别:前者在汇编时 进行,后者在程序执行时由CPU执行 例:AND AX, 3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与 AND AX, 3F00H等价。
汇编语言伪指令
汇编语言伪指令在汇编语言程序里,有一些特殊的助记符,这些助记符与指令系统的助记符不同,它们没有对应的机器码。
这些助记符在源程序中的作用是完成汇编程序的各种准备工作,包括定义变量、分配数据存储空间、控制汇编过程、定义程序入口等。
它们仅仅在汇编的过程中起作用,一旦汇编过程结束,它们的使命也就完成了。
这些助记符称为伪指令,它们所完成的操作称为伪操作。
不同汇编器的伪指令可能存在少量的区别,并非所有的伪指令在任何编译器上都能被识别。
一、符号定义伪指令符号定义(Symbol Definition)伪指令用于定义ARM汇编程序中的变量,对变量赋值和定义寄存器别名等,如表1所列。
表1 符号定义伪指令实例:GBLL P_ON ; 定义全局逻辑变量P_ON P_ON SETL {TRUE} ; 给全局逻辑变量P_ON赋值为真LCLA NUM ; 定义局部数字变量NUM NUM SETA 100 ; 给全局数字变量NUM赋值为100RegList RLIST {R0-R5,R8,R10} ; 定义一个寄存器列表RegList,可用微处理器系统结构与嵌入式系统设计(第3版)2; LDM/STM指令访问该列表二、数据定义伪指令数据定义(Data Denfinition)伪指令一般用于为特定的数据分配存储单元,同时完成对已分配存储单元的初始化工作。
数据定义伪指令如表2所示。
表2 数据定义伪指令从使用方法上来讲,数据定义伪指令可以分为以下3类。
1.SPACE伪指令SPACE用于分配一片连续的存储区,并初始化为0。
其中表达式中的数字表示分配的字节数。
SPACE也可以用%代替。
实例:DataSpace SPACE 100 ; 分配连续100字节的存储单元并初始化为0 2.MAP和FIELD伪指令MAP和伪指令FIELD经常结合在一起使用。
MAP用于定义一个结构化的内存表的首地址,可以用“^”替代。
FIELD用于定义一个结构化的内存表中的数据域,可以用“#”代替。
汇编实验3 伪指令
汇编实验三伪指令实验目的:(1)掌握汇编语言程序上机过程。
(2)掌握伪指令DB/DW, EQU, 属性操作符SEG, LENGTH, OFFSET, TYPE, SIZE以及PTR的用法。
实验内容:[1]验证数据段中的数据在内存单元中的存放,画出数据段中内存单元的地址和内容示意图操作步骤:: EDIT d:\hb\ex2.asm1.输入源程序在EDIT编辑环境File菜单下选择Save存盘,选择Exit退出编辑环境2.汇编源程序:masm ex2.asm(具体步骤略)3.连接目标程序:link ex2.obj(具体步骤略)4.用DEBUG调试并查看运行结果DEBUG ex2.EXE1先用U命令进行反汇编,看到源程序在内存中的存储2 T (单步执行一条指令。
)3 T (单步执行一条指令。
)4 D DS:0 (显示DS 段,偏移地址为0000单元的内容。
)用D 命令观看数据段的内容(用Debug 中的D 命令查看内存空间,观察用DB 、DW 定义的变量在内存单元的存放,观察EQU 定义的表达式是否会被分配内存单元?)画出内存示意图[2] 验证、掌握属性操作符SEG, LENGTH, OFFSET, TYPE, SIZE 的用法 操作步骤:① 输入源程序: EDIT d:\hb\ex2.asm②汇编源程序:masm ex2.asm(具体步骤略) ③连接目标程序:link ex2.obj(具体步骤略) ④ 用DEBUG 调试并查看运行结果对照源程序中的内容,掌握属性操作符SEG, LENGTH, OFFSET, TYPE, SIZE的意义,经过汇编后形成立即数。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
·四川大学计算机学院、软件学院
实验报告
学生姓名学号班级
学生专业计算机科学与技术学院计算机学院
课程名称汇编语言程序设计(第三次)实验时间2010年11月16日实验项目编译及伪指令功能分析报告撰写时间2010年11月16日
实验目的①
②用TD观察标号、常量和变量编译后的结果,加深对伪指令行为的理解;
③用TD观察编译程序对标号及变量名的自动管理;
④观察和理解系统对段寄存器及IP及SP的管理。
实验环境①X86系列桌面系统;
②UltraEdit-32、TASM、TLINK、TD。
实验内容
按实验代码asmtest.asm中的10个步骤完成相关内容,并做记录。
实验记录①目标代码数据段常量bits定义语句的编译结果是不留痕迹,
说明常量不分配储存空间。
②目标代码常量bits引用语句的编译结果0ACH ,对应的寻址方式是
直接寻址方式。
③目标代码标号lop定义语句的编译结果是不留痕迹,说明
没有为标号分配储存空间。
④目标代码标号lop引用语句的编译结果:0FAH ,本质上该值是:
目标语句的ip和当前执行语句的差值。
⑤将两nop语句的注释开,编译后目标代码标号lop引用语句的编译结果是
0F8 ,这体现了编译程序对标号的自动管理功能。
⑥目标代码变量x在定义语句的编译结果:偏移量为0000H ;初值为
08H 。
⑦目标代码变量x在引用语句的编译结果0000H ,对应的寻
址方式是直接寻址方式。
⑧将变量定义语句y的注释打开,目标代码变量x的偏移量被更改为为
0200H ,这体现了编译程序对变量的自动管理功能。
⑨实验代码要求注释的四个位置应注释为:
显示x的偏移量。
显示x的值。
显示标号Next的段基址的高16位
显示标号Next的偏移量的
教师评议
成绩评定:指导教师签名:。