实验二 伪指令实验
伪指令的使用与心得

伪指令的使用与心得1 伪指令的定义所谓指令(instruction),针对汇编程序而言,就是将CPU直接识别的指令——二进制指令通过查表的方式转换为asmmebly指令而方便程序人员来编制程序,二进制指令就是我们所常说的机器指令。
这个转换过程是编译器的工作,不用程序员来干涉。
汇编语言指令的形式是以助记符的形式出现的, 所以比较容易理解和记忆。
用汇编指令编制的汇编语言源程序, 可长可短, 这是由程序员根据系统的要求, 或是根据程序的难易程序决定的。
单片机与其它计算机一样, 在汇编源程序时需要向汇编程序提供某些必要的信息, 诸如源程序的目的程序从存储器的哪一个单元开始装人? 源程序是否结束? 程序中所用的数据存放在什么地址? 某一个标号的地址是哪里? 某一个可位寻址的代名字是什么? 等等。
这些信息要和源程序一起出现, 成为源程序的一部分, 这一类信息也可以指令的形式出现, 汇编语言把它们称为伪指令。
所以伪指令是一些特殊的符号集合, 它们不是一个单片机系统指令集中的指令(在指令集中找不到)。
我们可以通过以上的过程描述发现,通过以上从二进制到汇编指令的转换过程发现,这方便了程序人员进行程序的编制。
但是,用汇编程序代码和高级语言的代码进行比较,汇编程序还是很复杂。
比如说,一个简单比较过程,需要使用CMP、JMP、JNZ、JZ等一系列的指令来实现,不仅复杂而且容易出错,很大的影响了效率。
正是因为这个方面的原因,MASM 就出现了.if.endif.elseif等伪指令,这些伪指令为我们在汇编程序中使用和高级语言十分接近的的控制方式来进行比较、循环等结构控制。
至于,这些伪指令到真正的指令之间的转换工作,交给汇编器来完成就好了。
总结起来,伪指令最终面对的是CPU指令的指令。
伪指令又称汇编程序控制译码指令。
“伪”字体现在汇编时伪指令不产生机器指令代码,不影响程序的执行, 仅产生供汇编用的某些命令, 在汇编时执行某些特殊操作。
实验二 伪指令实验

实验二伪指令实验一、实验目的1.掌握数据定义伪指令的使用方法;2.掌握符号定义伪指令的使用方法;3.掌握段定义伪指令的使用方法4.掌握各种数据在内存中的存放形式。
二、实验要求1.学会使用数据定义伪指令定义字节数据、字数据、双字数据、四字数据及十字数据;2.学会使用DEBUG中的D命令观察字节数据、字数据、双字数据等在内存中的存放格式;3.学会使用DEBUG中的D命令观察带符号数据和不带符号数据在内存中的存放形式;4.学会使用DEBUG中的D命令观察实数在内存中的存放形式。
三、实验举例【例3.2】 编辑、汇编、连接下列程序段,然后在DEBUG下观察数据的存储格式。
【步骤一】 启动EDIT编辑器,编辑源程序。
程序清单如下:CSEG SEGMENTX1 DB 0AH,0BH,0CH,0DH,31H,32H,33H,34HX2 DB 10,11,12,13,14,15,16,17,18X3 DB -1,-2,-3,-4,-5,-6,-7,-8Y1 DB 25+25,78-34,15*4,90/3Y2 DB 80 MOD 9,3 DUP(50)Y3 DB ‘ABCDEFGH’Z1 DW 1234H,5678H,0ABCDH,0ABEFHZ2 DW -1,-2,-3,-4,-5,-6,-7,-8Z3 DW OFFSET Y3,3 DUP(0),OFFSET Z2,3 DUP(?)CSEG ENDSEND程序输入完毕,以EXAM2.ASM为文件名存入磁盘,进行下一步操作。
【步骤二】 对源程序EXAM2.ASM进行汇编,生成目标程序EXAM2.OBJ。
操作如下:C:>\MASM EXAM2;↙屏幕显示如下信息:Microsoft (R) Macro Assembler Version 5.00Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.50554 + 449926 Bytes symbol space free0 Warning Errors0 Severe Errors汇编通过,没有错误信息产生,进行下一步操作。
汇编语言指令及伪指令练习的实验报告总结(范文)

汇编语言指令及伪指令练习的实验报告总结汇编语言指令及伪指令练习的实验报告总结篇一:汇编语言实验报告福建农林大学金山学院课程名称:姓名:系:专业:年级:学号:指导教师:职称: (程序设计类课程) 实验报告汇编语言 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目录下。
所有实验电子版报告

实验报告课程:汇编语言上机实验专业:电子信息科学与技术班级:11电子1班学号:119050244098姓名:徐睿昀物理与电子信息学院目录实验一 DEBUG常用命令及8086指令使用 (1)实验二内存操作数及寻址方法 (5)实验三汇编语言程序上机过程 (10)实验四数据串传送和查表程序 (13)实验五屏幕字符显示程序 (19)实验六屏幕字符显示程序 (23)实验七分枝程序 (27)实验八多重循环程序 (33)实验九子程序 (37)汇编语言程序设计实验报告1学号:119050244098 姓名:徐睿昀实验日期:2013 10 20 实验名称:实验一 DEBUG常用命令及8086指令使用实验目的:1、8086指令: MOV,ADD,ADC,SUB,SBB,DAA,XCHG2、DEBUG命令: A,D,E,F,H,R,T,U。
3、ASCII码及用16进制数表示二进制码的方法。
4、8086寄存器: AX,BX,CX,DX,F,IP。
实验内容:一、DEBUG 命令使用:1、打 DEBUG 进入 DEBUG 控制,显示提示符 '_ '。
2、用命令 F100 10F 'A' 将'A'的ASCII码填入内存。
3、用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符。
4、用命令 F110 11F 41 重复上二项实验,观察结果并比较。
5、用命令 E100 30 31 32 …… 3F将30H-3FH写入地址为100开始的内存单元中,再用D命令观察结果,看键入的16进制数是什么字符的ASCII码?6、用H命令检查下列各组16进制数加减结果并和你的手算结果比较:(1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758,347FH7、用R 命令检查各寄存器内容,特别注意AX,BX,CX,DX,IP及标志位中ZF,CF和AF的内容。
西安交通大学微机原理第一次实验报告

微型计算机原理与接口技术第一次实验报告实验者姓名:实验者学号:所在班级:报告完成日期:20年月日实验二分支程序的设计一、实验目的1.学习提示信息的显示及键盘输入字符的方法。
2.掌握分支程序的设计方法。
二、实验内容在提示信息下,从键盘输入原码表示的二位十六进制有符号数。
当此数大于0时,屏幕显示此数为正数;当此数小于0时,屏幕显示此数为负数;当此数等于0时,屏幕显示此数为零。
三、实验调试过程利用-u命令进行反汇编,结果如下。
三个CMP语句运行完的地址如图所示,第一个CMP运行完的是29H输出结果的地址如下图所示:首先对输入为负数时进行验证:输入FFH,设置一个断点在29H,利用-t命令观察跳转,结果如图:可以看到,程序最终正确的转入输出负的分支。
再输入正数11H,利用-t观察整个比较过程如下:可以看到,程序最终正确的转入输出正的分支。
最后输入00H,利用-t观察整个比较过程如下:可以看到,程序最终正确的转入输出0的分支。
四、实验框图及程序代码实验框图:程序代码:CRLF MACROMOV AH,02HMOV DL,0DHINT 21HMOV AH,02HMOV DL,0AHINT 21HENDMDA TA SEGMENT;定义结果信息MESS1 DB 'INPUT DATA:',0DH,0AH,'$'MESS2 DB 'THIS DATA IS+',0DH,0AH,'$'MESS3 DB 'THIS DATA IS-',0DH,0AH,'$'MESS4 DB 'THIS DATA IS ZERO',0DH,0AH,'$'DA TABUF DB 3 ;定义最大可输入字符长度ACTLEN DB ? ;实际输入字符长度STRING DB 3 DUP(?) ;输入字符缓冲区DA TA ENDSSSEG SEGMENT PARA STACK 'STACK'DB 50 DUP(0)SSEG ENDSCODE SEGMENTASSUME CS:CODE,SS:SSEG,DS:DA TASTART:MOV AX,DATAMOV DS,AXMOV AX,SSEGMOV SS,AXMOV DX,OFFSET MESS1MOV AH,09HINT 21HMOV AH,0AHMOV DX,OFFSET DATABUFINT 21HCRLFMOV AL,STRINGCMP AL,38HJAE ISNEGCMP AL,30HJNZ ISPOSMOV AL,[STRING+1]CMP AL,30HJNZ ISPOSJMP ISZEROISPOS:MOV DX,OFFSET MESS2MOV AH,09HINT 21HJMP DONEISNEG:MOV DX,OFFSET MESS3MOV AH,09HINT 21HJMP DONEISZERO:MOV DX,OFFSET MESS4MOV AH,09HINT 21HJMP DONEDONE:MOV AX,4C00HINT 21HCODE ENDSEND START五、实验结果及分析编写的汇编程序EX2.ASM经过汇编MASM与链接LINK生成可执行文件EX2.EXE,测试如下:可见,程序能够正确判断输入数据的正、负、零情况。
[工学]第二部分 汇编语言程序设计——伪指令
![[工学]第二部分 汇编语言程序设计——伪指令](https://img.taocdn.com/s3/m/f165327b77232f60ddcca132.png)
定义 10 字节伪指令 DT—— 用于为一个或
多个10字节变量分配空间及初始化
10字节变量可以表达扩展精度浮点数
例3.2:数据定义综合应用-1/2 .model small
bvar wvar dvar qvar tvar abc msg bbuf dbuf CALLDOS
.stack .data DB 16 DW 4*3 DD 4294967295 ;=232-1 DQ ? DB 1,2,3,4,5 DT 2345 ;定义了BCD码2345H DB 'a','b','c' DB 'Hello',13,10,'$' DB 12 DUP('month') DD 25 DUP(?) EQU <int 21h>
定义字节单元伪指令DB
DB伪指令用于分配一个或多个字节单元, 并可以将它们初始化为指定值 初值表中每个数据一定是字节量 (Byte),存放一个8位数据: 可以是0~255的无符号数 或是-128~+127带符号数 也可以是字符串常数
data X Y data
segment ;数据段 db 'a',-5 db 2 dup(100),? db 'ABC' ends
初值表
初值表是用逗号分隔的参数 主要由数值常数、表达式或?、 DUP
组成
?——表示初值不确定,即未赋初值; DUP——表示重复初值 DUP的格式为: 重复次数 DUP(重复参数)
变量定义伪指令助记符
变量定义伪指令根据申请的主存空间单位分
类 DB——定义字节伪指令 DW——定义字伪指令 DD——定义双字伪指令 DF——定义3字伪指令 DQ——定义4字伪指令 DT——定义10字节伪指令 还有定位伪指令
DSP实验报告1,2

DSP原理与应用实验报告实验一集成开发环境CCS应用基础一、程序分析(1)三个文件的作用及接口情况,说明各个文件中伪指令的作用。
答:test1.asm文件的作用是汇编主程序,vectors.asm文件是中断矢量处理程序,test1.cmd文件是命令文件。
test1.asm中伪指令的作用:.title作用是在每页的顶部打印文件标题.mmregs为存储器映像寄存器定义符号名。
使用.mmregs的功能和对所有的存储器映像寄存器执行set伪指令相同。
.usect汇编命令建立的自定义段也是未初始化段.def 定义全局变量.text已初始化段.end终止汇编,位于程序源程序的最后一行。
vectors.asm中伪指令的作用:.ref 定义全局变量.sect汇编器伪指令建立的自定义段也是已初始化段.space对存储器进行初始化。
(2)分析主程序的结构和功能,对每条指令进行注释,写出执行结果。
.title "example1.asm".mmregs ;使能存储器映像寄存器stack .usect "STACK",10h.def _c_int00;------------------------------------------------------------------------------.text_c_int00:stm # stack+10h, SP ;设置堆栈指针stm #0x0000, SWWSR ;所有存储器未加软件延迟;================================================stm #0x70,AR2st #0xff80,*AR2;================================================;观察控制位SXM的作用;当SXM=0时,进行无符号数的加载rsbx SXM ;SXM置零nopld *AR2, A ;(A)=( 000000FF80 H);------------------------;当SXM=1时,进行有符号数的加载ssbx SXM ;SXM置一nopld *AR2, A ;(A)=( FFFFFFFF80H ) ;================================================ ;================================================ ;观察控制位OVM的作用;当OVM=0时,对溢出不进行处理rsbx OVMld #0x7fff, 16, B ;立即数左移16位给Badd #0x7fff, 16, B ;(B)=( 00FFFE0000H);------------------------;当OVM=1时,对溢出进行处理ssbx OVMld #0x7fff, 16, Badd #0x7fff, 16, B ;(B)=( 007FFFFFFFH );================================================ ;================================================ ;观察控制位C16的作用;当C16=0时,进行32位双精度数加法运算ssbx OVMld #0x0001, 16, Aadd #0x7fff, Adst A, *AR2ld #0x0001, 16, Aor #0xffff, A ;相“或”rsbx C16nopdadd *AR2, A, B ;(B)=( 0000037FFEH);------------------------;当C16=1时,进行两个独立的16位数加法运算ssbx C16nopdadd *AR2, A, B ;(B)=( 0000027FFE H);================================================ ;================================================ ;观察控制位FRCT的作用;当FRCT=0时,对乘积不进行移位ld #0x1234, 16, Arsbx FRCTnopmpya *AR2 A中高16位与T相乘;(B)=( 0000001234H) ;------------------------;当FRCT=1时,对乘积左移1位ssbx FRCTnopmpya *AR2 ;(B)=( 0000002468 H);================================================ ;================================================ ;观察测试位TCbitf *AR2, #0x8000 ;(TC)=( 0 )nopnop;------------------------bitf *AR2, #0x0001 ;(TC)=( 1 )nopnop;================================================ ;================================================ ;观察标志位Cssbx SXMld #0x7fff, Ald #0x8000, Bmax A ;(C)=( 0 )nopnop;------------------------min B ;(C)=( 1 )nopnop;================================================ ;================================================ ;观察标志位OV A, OVBssbx SXMrsbx OV Ald #0x7fff, 16, Aadd #0xffff, A ;(OV A)=(0 )nopnop;------------------------add #0x7fff, 16, A ;(OV A)=( 1 )nopnop;================================================ dead_loop:nopnopnopnopb dead_loop.end(3)写出本工程的分段和存储器的定位情况。
第4、5章 伪指令

伪/宏指令和目标链接文件
4 目标文件链接
链接器命令文件和链接器伪指令
例6.24 MEMORY指令举例
/ * Sample Command file with MEMORY directive * / file1.obj file2.obj -o prog.out MEMORY { PAGE0: ROM: ORIGIN=0C00h ,LENGTH=1000h PAGE1: SCRATCH: ORIGIN =60h, LENGTH =20h RAM: ORIGIN =200h, LENGTH =200h }
.usect :为一个有名称的段保留一段存储空间,但不初始 化。 .asect:创建具有绝对地址的初始化命名段。 小结:1) .text,.data, .sect, .asect创建已初始化段。 2) .bss, .usect 创建未初始化段。 3) .sect ,.usect创建自定义段和子段
未初始化段的建立
伪/宏指令和目标链接文件
4 目标文件链接
链接器命令文件和链接器伪指令
例6.25 SECTIONS { .text { f1.obj(.text) f2.obj(sec1) f3.obj f3.obj(.text,sec2) }
}
输入段不必相互同名也不必和输出段同名。如果列举输入文件时不带段, 那么它所有的段将被包含在输出段之内。
语法:run = allocation 或 run > allocation 如果在一个段中 load 和 run 的地址相同, run 可以省略。
链接器为每个输出段分配两个目标存储器地址:装载地址和运行地址。通 常这两个地址是相同的。但有时用户可能把代码装入存储器的一个区域却在另 一个区域运行它。例如在引导加载程序,用load设置它的装载地址,用run设置 它的运行地址。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验二伪指令实验
一、实验目的
1.掌握数据定义伪指令的使用方法;
2.掌握符号定义伪指令的使用方法;
3.掌握段定义伪指令的使用方法
4.掌握各种数据在内存中的存放形式。
二、实验要求
1.学会使用数据定义伪指令定义字节数据、字数据、双字数据、四字数据及十字数据;
2.学会使用DEBUG中的D命令观察字节数据、字数据、双字数据等在内存中的存放格式;
3.学会使用DEBUG中的D命令观察带符号数据和不带符号数据在内存中的存放形式;
4.学会使用DEBUG中的D命令观察实数在内存中的存放形式。
三、实验举例
【例3.2】 编辑、汇编、连接下列程序段,然后在DEBUG下观察数据的存储格式。
【步骤一】 启动EDIT编辑器,编辑源程序。
程序清单如下:
CSEG SEGMENT
X1 DB 0AH,0BH,0CH,0DH,31H,32H,33H,34H
X2 DB 10,11,12,13,14,15,16,17,18
X3 DB -1,-2,-3,-4,-5,-6,-7,-8
Y1 DB 25+25,78-34,15*4,90/3
Y2 DB 80 MOD 9,3 DUP(50)
Y3 DB ‘ABCDEFGH’
Z1 DW 1234H,5678H,0ABCDH,0ABEFH
Z2 DW -1,-2,-3,-4,-5,-6,-7,-8
Z3 DW OFFSET Y3,3 DUP(0),OFFSET Z2,3 DUP(?)
CSEG ENDS
END
程序输入完毕,以EXAM2.ASM为文件名存入磁盘,进行下一步操作。
【步骤二】 对源程序EXAM2.ASM进行汇编,生成目标程序EXAM2.OBJ。
操作如下:
C:>\MASM EXAM2;↙
屏幕显示如下信息:
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987. All rights reserved.
50554 + 449926 Bytes symbol space free
0 Warning Errors
0 Severe Errors
汇编通过,没有错误信息产生,进行下一步操作。
【步骤三】 对目标程序EXAM2.OBJ进行连接,生成执行程序EXAM2.EXE。
操作如下:
C:>\LINK EXAM2;↙
屏幕显示如下信息:
Microsoft (R) Segmented-Executable Linker Version 5.13
Copyright (C) Microsoft Corp 1984-1991. All rights reserved.
LINK: warning L4021: no stack segment
LINK: warning L4038: program has no starting address
连接过程产生两个错误信息。
① no stack segment
此错误信息是说源程序没有设置堆栈段,该错误不影响程序的执行,可以忽略。
② program has no starting address
此错误信息是说源程序没有设置起始地址,该错误也不影响程序的执行,可以忽略。
以上两个错误信息可以忽略,进行下一步操作。
【步骤四】 进入DEBUG状态,在DEBUG下用D命令观察数据在内存中是如何存储的。
操作如下:
C:>\DEBUG EXAM2.EXE↙
-D CS:0 4F↙
命令发出后,屏幕显示如下信息:
0B9B:0000 0A 0B 0C 0D 31 32 33 34-0A 0B 0C 0D 0E 10 11 12 ....1234........
0B9B:0010 FF FE FD FC FB FA F9 F8-0E 0A 0F 02 08 50 50 50 ................
0B9B:0020 41 42 43 44 45 46 47 48-34 12 78 56 CD AB EF AB ABCDEFGH4.xV....
0B9B:0030 FF FF FE FF FD FF FC FF-FB FF FA FF F9 FF F8 FF ................
0B9B:0030 20 00 00 00 00 00 00 00-30 00 00 00 00 00 00 00 .......0.......
注意:因为没有段说明语句,所以数据是存储在CS(代码)段的,因此要使用D来查看CS段内容。
CS段0~4F号单元的内容,即是我们用伪指令定义的数据。
四、实验内容
1.编辑、汇编、连接下列程序段。
然后在DEBUG中,用D命令观察DB定义的数据在内存中的存放格式。
程序段如下:
DSEG SEGMENT
A1 DB 1, 18, 25H, 80H, -128,‘ABC’
A2 DB 3*5, 48/4, 36-5, 26 MOD 10
A3 DB ?, ?, 36H, -1, 36Q
A4 DB 5 DUP(26),3 DUP(?)
A5 DB 2 DUP(2 DUP(4), 15), 7FH
DSEG ENDS
END
2.编辑、汇编、连接下列程序段。
然后在DEBUG中,用D命令观察DW定义的数据在内存中的存放格式。
程序段如下:
DSEG SEGMENT
B1 DW 1234H, -5678H, 8000H, ’XY’
B2 DW 256*16, 46H, -25
B3 DW ?, OFFSET B1
B4 DW 3 DUP(1234H)
DSEG ENDS
END
3.编辑、汇编、连接下列程序段。
然后在DEBUG中,用D命令观察DD定义的数据在内存中的存放格式。
程序段如下:
DSEG SEGMENT
C1 DD 12345678H,‘MN’
C2 DD 80000000H, -1
C3 DD 36.625, -36.625
C4 DD C1, 3 DUP(?)
DSEG ENDS
END
4.自选数据,编写程序段熟悉数据定义伪指令DQ和DT的使用方法,并且用DEBUG中的D命令观察DQ、DT定义的数据在内存中的存放形式。
五、实验报告要求
1.按照上机实验的操作顺序写出操作步骤;
2.写出各实验数据在内存中的存放格式;
3.总结实验过程中遇到的问题及解决方法。