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

伪指令的使用与心得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设置 它的运行地址。
汇编语言上机实验二2015李中

课程:汇编语言程序设计
专业班级:计算机科学与技术
学号:
姓 名:李中
实验二 汇编命令(伪指令)实验
一、实验目的
1、掌握数据定义伪指令的使用方法;
2、掌握符号定义伪指令的使用方法;
3、掌握段定义伪指令的使用方法;
4、掌握各种数据在内存中的存放形式。
二、实验要求
1、学会使用数据定义伪指令定义字节数据、字数据、双字数据、四字数据及十字数据;
程序段如下:
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
步骤:编、链接下列程序段。然后在debug中,用D命令观察DD定义的数据在内存中的存放格式。
程序段如下:
DSEG SEGMENT
C1 DD 12345678H,'MN'
C2 DD 80000000H,-1
C3 DD 36.625,-36.625
C4 DD 3 DUP (1234H)
DSEG ENDS
END
步骤:
编辑:
汇编:
链接:
测试:
四、遇到的问题
1.用edit进行程序编辑时,文件名没有加上后缀.ASM,汇编和链接后,用debug中的D命令查看数据的存储形式时,发现全是乱码现象。
2.用debug进行测试时,修改程序,必须重新汇编、链接,且将原来生成的文件删除。
2、学会使用DEBUG中的D命令观察字节数据、字数据、双字数据等在内训中的格式;
3、学会使用DEBUG中的E命令修改内存中存放的数据;
第四章 伪指令

数据定义伪指令的格式为: [变量名] DB(DW、DD、DQ、DT) 表达式1,表达式2,… 表达式1,表达式2……是给变量或指定的存储单元赋予初值,它们有以下几种形式: (a)数值表达式 数据定义伪指令可以为一个或连续的存储单元设置数值初值。 (b)字符串表达式 对于DB伪指令,字符串的长度允许超过2个字符,但不能超过255个字符,字符 串必须用单引号括起来,它可为字符串中的每个字符分配1字节单元,字符串 从左至右以字符的ASCII码形式按地址递增的顺序依次存放。 (c)?表达式 不带引号的?,用于为变量预留内存单元,暂时不存入数据,即表示所定义的 变量无确定的初值。 例如:A DW ?,?为变量A预留2个字单元。 (d)地址表达式 操作数为地址表达式时,只适用于DW和DD这两种数据定义伪指令。如果地址表 达式为一变量(标号)名,用DW伪指令则是取它的偏移地址来初始化变量;用 DD伪指令则是取它的段首地址和偏移地址来初始化变量。 (e)带DUP的表达式 格式为:n DUP (表达式),其中n为重复因子,只能取正整数,它表示定义了 n个相同的数据存储单元。
在8086汇编语言中,运算符分为:算术运算符、逻辑运算符、关系运算
符、数值返回运算符、属性运算符和字节分离运算符。
(一)、表达式
(1)数值表达式 数值表达式是由常量与算术运算符、逻辑运算符或关系运算符构成的有意 义的式子。数值表达式在汇编期间进行运算,运算结果为一数值常量,它 只有大小而没有属性。
数据定义伪指令的格式为: [变量名] DB(DW、DD、DQ、DT)
Байду номын сангаас
表达式1,表达式2,„
其中:变量名是可选项,它仅代表所定义数据存储区第一个单元的地址; DB、DW、DD、DQ和DT是伪指令符,具体一条数据定义伪指令取5种之一。 DB定义的是字节类型的变量,每个表达式被分配1个字节单元。 DW定义的是字类型的变量,每一个表达式被分配1个字单元(2个字节)。 DD定义的是双字类型的变量,每一个表达式被分配2个字单元(4个字节)。 DQ定义的是四字类型的变量,每一个表达式被分配4个字单元(8个字节)。 DT定义的是十字节类型的变量,每一个表达式被分配10个字节单元。
汇编语言实验指导

实验一DEBUG命令及MS-DOS命令一、实验目的要求1.掌握DEGBUG的调用方法及常用命令在汇编程序调试过程中的使用;2.练习常用的MS-DOS命令。
二、实验内容(一)DEBUGdebug是为汇编语言设计的一种调试程序,它通过单步、设置断点等方式为汇编程序提供有效的调试手段。
1、debug调用debug [d:][path][filename[.ext]] [parm1] [parm2]文件名路径驱动器号2、debug主要命令(1)显示存储单元命令D(DUMP)格式为:-D [Address] or -D [range]例:显示有效地址100~10f的存储单元内容的方法为:-D 100 10fDebug 按以下格式显示范围中的内容:04BA:0100 54 4F 4D 00 53 41 57 59-45 52 00 00 00 00 00 00 TOM.SA WYER......注意:D命令自动显示DS段的内容,如只指定首地址,则显示从首地址开始的80个字节;如无指定地址,则显示上一D命令的最后一单元后的80个字节。
每个显示行显示16 字节的内容,第8 字节和第9 字节之间有一个连字符。
每个显示行从16 字节的边界上开始。
(2)修改存储单元命令1) -E [Address] [list]该命令可以使用LIST的内容替代指定范围的存储单元内容。
如:-E DS:100 F3'XYZ'8D命令可以替代存储单元DS:100至0104的原始数据。
2)-E Address使用该格式可以逐个修改存储单元的内容。
如:-E CS:100可能显示如下内容:18E4:0100 89._若要把该单元改为78,可直接键入即可。
3)填写命令F-F range list如:-F DS:0100 5 f5'xyz'8d将使DS:0100~0104五个存储单元的数据被F8‘XYZ’8D所替换。
实验二 汇编语言程序上机过程及调试

实验报告二课程微机原理实验名称汇编语言程序上机过程以及调试第页专业电子信息班级__ __ 学号_ __ 姓名实验日期:2014 年 3 月10 日报告退发(订正、重做)一、实验目的学习汇编语言程序设计的基本步骤,即编辑(EDIT)程序、汇编(MASM)、连接(LINK)和运行,使对汇编语言程序设计有一个初步的认识。
二、实验内容1、学习使用全屏幕文本编辑软件EDIT。
用EDIT输入一段给定的源程序。
2、用MASM对已存盘的源程序进行汇编,形成目标文件(.OBJ);如有错误,再返回到EDIT进行修改。
3、用LINK对上述形成的目标文件进行连接,形成可执行文件(.EXE)4、在DOS提示符下运行该可执行文件。
[汇编语言程序的编写格式]汇编语言程序一般由几个段组成,它们分别是堆栈段,数据段,代码段。
任何一个源程序至少必须有一个代码段和一条作为源程序结束的伪指令END。
段的定义有两种格式,分述如下:1,完整的段定义格式:一个段由段头,段体,段尾组成,形式如下:段名SEGMENT[定位类型][组合类型][‘类别’]……段名ENDS其中SEGMENT后的参数一般可省略,详细说明参阅后面的有关章节。
2,简化的段定义格式(MASM5.0版本提供)每段以.开始后跟固定的段名,一般形式如下:DOSSEG.MODEL 存储类型;“存储类型”可选择为SMALL。
.STACK[大小];堆栈段,“大小”指定堆栈的字节数。
.DATA;数据段。
.CODE[名字];代码段;一般只有一个代码段,名字可缺少……例1:用完整的段定义编写一源程序。
NAME EXAM1;可以省略DATA SEGMENT;定义数据段,以下是数据段的内容STR1 DB “HELLO,WELCOME!”,13,10,‘$’STR2 DB “DO YOU LIKE COMPUTER?(Y/N)”,13 10,‘$’STR3 DB “NICE!”,13,10,‘$’STR4 DB “SORRY!”,13,10,‘$’STR5 DB “UNKNOW,ANSWER AGAIN!(Y/N)”,DB 13,10,‘$’STR6 DB “SEE YOU NEXT TIME!”,13,10,‘$’DA TA ENDS ;数据段结束CODE SEGMENT ;定义代码段ASSUME CS:CODE;DS:DATA;以下是代码段内容START:MOV AX,DA TA;给数据段寄存器赋值MOV DS,AXMOV AH,9;显示一字符串的功能号MOV DX,OFFSET STR1;显示字符串STR1的偏址INT 21H;DOS功能调用ASK :MOV DX,OFFFSET STR2;显示字符串STR2INT 21HMOV AH,1;键盘输入一字符的功能号INT 21H;键入的字符ASCⅡ码在ALNOT AL;求反TEST AL,‘Y’;是否按下‘Y’或‘y’键JE NEXT1TEST AL,‘y’JE NEXT1TEST AL,‘N’;是否按下‘N’键或‘y’键JE NEXT2TEST AL, ‘n’JE NEXT2MOV DX,OFFSET STR5;不是按上述键MOV AH,9INT 21HJMP ASK;再返回ASKNEXT1:MOV DX,OFFSET STR3;是按下‘Y’或‘y’键MOV AH,9INT 21HJMP BYENEXT2:MOV DX,OFFSET STR4;是按下‘N’或‘n’键MOV AH,9INT 21HBYE:MOV DX,OFFSET STR6INT 21HMOV DL,7;喇叭响的ASCⅡ码MOV AH,2INT 21HMOV AH,4CH;退回DOSINT 21HCODE ENDS;代码段结束END START;源程序结束注:源程序中的每一行注释语句前一定要加分号‘;’,下同。
微机原理与汇编-伪指令

2.段分配伪指令 ASSUME
段分配伪指令用来完成段的分配,说明当前哪些 逻辑段被分别定义为代码段、数据段、堆栈段和 附加段。
1、代码段用来存放被执行的程序; 2、数据段用来存放程序执行中需要的数据和运 算结果; 3、当用户程序中使用的数据量很大或使用了串 操作指令时,可设置附加段来增加数据段的容量; 4、堆栈段用来设置堆栈。
DT(define ten bytes):定义一个十字节类型的变量,其后的每个 操作数均占用5个字(10个字节)。 其中,各变量定义伪指令都将高位字节数据存放在高地址中,低位字 节数据存放在低地址中。
格式1又可分为以下几种具体用法 :
(1)用数值表达式定义变量 【例2】 K1 DB 10, 4, 10H
段名 ENDS
任何一个逻辑段从SEGMENT语句开始,以ENDS语句结束。伪指令名 SEGMENT和ENDS是本语句的关键字,不可以默认,并且必须成对出现。 语句中段名是必选项,定位类型、组合类型、字长类型、类别为可选项。 用户自己选定,不能省略,其规定同变量或标号,一个段开始与结尾用 的段名应一致。
④ 段寄存器的装入。
【例1】
DATA SEGMENT ; 定义数据段
XX
DB ?
YY
DB ?
ZZ
DB
DATA ENDS
EXTRA SEGMENT ; 定义附加段
RSS1 DW ?
RSS2 DW ?
RSS3 DD ?
EXTRA ENDS
STACK SEGMENT ; 定义堆栈段
DW 50 DUP( )
K2 DW 100, 100H, -5 K3 DD 3*20, 0FFFDH 变量K1, K2, K3经汇编后的结果如图1所示。
sy22

; 数据段 数据段1 ; 定义源串 ;数据段 数据段2 数据段 ; 定义目的缓冲区 ;代码段 代码段 ;指示指令中标号 变量所在段 指示指令中标号,变量所在段 指示指令中标号 ;设置传送方向 设置传送方向 ;DS: SI ← 源串首地址 :
;ES:DI ← 目的首地址 :
;CX ← 串的长度 ;串传送 串传送 ;调用 调用4CH系统功能 返回 系统功能,返回 调用 系统功能 返回DOS
; 执行程序 -G Program terminated normally ; 查看目的串 -D 129E: 0 L20 129E:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!.......... 129E:0010 FC B8 9D 12 8E D8 8D 36-00 00 B8 9E 12 8E C0 BF .......6........ ; 从源串重新查看 -D 129D: 0 L50 129D:0000 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!.......... 129D:0010 48 65 6C 6C 6F 21 00 00-00 00 00 00 00 00 00 00 Hello!.......... 129D:0020 FC B8 9D 12 8E D8 8D 36-00 00 B8 9E 12 8E C0 BF .......6........ 129D:0030 00 00 B9 06 00 F3 A4 B4-4C CD 21 09 E8 08 00 03 ........L.!..... 129D:0040 F1 E8 03 00 3C 0D C3 AC-E8 EC F8 75 04 3C 3B 75 ....<......u.<;u -
实验二 DEBUG使用方法

实验二DEBUG使用方法一、实验目的1.熟悉DEBUG提供的调试环境。
2.学习使用Debug的常用命令,汇编、运行小段程序。
3.学习8088/8086的寻址方式、指令功能。
观察计算机执行简单程序的工作过程。
二、实验内容与操作指导Debug子命令的功能与使用格式见上章的列表介绍。
下面通过8个程序小段实例,学习其用法。
(一)由DOS进入DEBUG调试环境1.点击”开始”→程序→附件→命令提示符→DEBUG ↵将调试程序装入内存注意:当机器控制权由DOS成功地转移给调试程序后,将显示“—”号,它是debug的状态提示符,表示可以接受调试子命令了。
2. —R↵显示CPU中各寄存器当前初始内容。
请记录于下列各项,后面实验将用到。
AX= BX= CX= DX= BP= SI= DI=DS= ES= SS= SP= CS= IP=(1)此时,调试工作区的4个段值相同,指向同一起点。
表明共用一个64KB空间。
(2)SS:SP指向堆栈顶单元。
SP为FFFE或FFEE,正好是本段的最高可用地址。
表明堆栈自动使用最高地址,栈区由底往上(低址方向)生长。
(3)CS:IP为约定的调试工作区地点(IP=0100),可由此装入待调试程序代码,或汇编键入的程序小段。
工作区由(低址)往下使用。
(4)Debug用符号给出寄存器中8个标志位的当前状态。
其含义如下表所示。
(5)当运行程序至断点处停下时,或单步多步跟踪执行指令时,Debug均显示各寄存器的当时内容,便于及时观察结果。
(二)汇编运行小段程序1.1求和运算给程序1.1人工直接给寄存器赋初值(1) 给AX、BX赋值—RAX ↵AX 显示AX当前内容:FDAA 键入被加数—RBX ↵BX 显示BX当前内容:FBCE 键入加数(2) 汇编小段程序。
注意:每行指令后用回车结束,机器即进行汇编,出错将有提示。
调试状态下操作数的输入和显示均为HEX十六进制,故不必加后缀H。
—ACS:100 ↵:0100 ADD AX,BX ;求和:0102 MOV CX,AX ;转存和数:0104 INT 20 ;结束程序(软中断调用):0106 ↵;结束汇编—R ↵查看各寄存器内容。
02_5伪指令

第2章
段名
3.1.2 完整段定义伪指令
segment ... ends [定位] [组合] [段字] [‘类别’] ;语句序列
段名
完整段定义由SEGMENT和ENDS这一对伪指令实现,
SEGMENT伪指令定义一个逻辑段的开始,ENDS伪指令表 示一个段的结束
段定义指令后的4个关键字用于确定段的各种属性,
第2章
汇编结束伪指令
END [标号] 指示汇编程序MASM到此结束汇编过 程
源程序的最后必须有一条END语句
可选的标号用于指定程序开始执行点,
连接程序将据此设置CS : IP值
程序终止和汇编结束是两码事
第2章
3.1.1 简化的段定义格式
.module .stack .data …… .code Start: move ax , s1 ……
符号应用(左边程序段等价右侧的符号形式)
mov ah,2 mov dl,13 int 21h
;mov ah,DosWriteChar ;mov dl,CarriageReturn ;CallDOS
第2章
2. 有属性的符号
汇编语言程序中,指令参数还有地址
型,它的主要形式是标号和名字(变 量名、段名、过程名等) 硬指令的操作数有存储单元;存储单 元就应该用地址型参数(存储器操作 数)表达
Data segment A1 db 0,1,2,3,4,5 A2 db ‘012345’ Count equ 30 A3 60h A5 dw 0 Data ends
Mov ch,byte ptr a4+3 (ch)=0h
第2章
例
DS: 000DH DS: 000CH DS: 000BH DS: 000AH DS: 0009H DS: 0008H DS: 0007H
微机原理 伪指令

. 链接参数 (Combine Type) :
PRIVATE (缺省) 不与其他段合并 PUBLIC 与其他模块中的同名段链接时,地址由低向 高,组成一个连续逻辑段,公用一个段首址。按指定的 链接次序连接。 COMMON 与其他模块中的同名段链接时,采取覆盖 的方式,组成一个逻辑段,其长度等于分段中最长者。 MEMORY 同 PUBLIC STACK 与其他模块中的同名堆栈段链接时,连接成 一个大的逻辑段。 AT (表达式) (不能在代码段中用)段首址定位于“ 表达式”指定的 16 位段值处。
eg. ORG 100H
Directives for defining data
DB DW DD DF DQ DT byte word double word farword quadword tenbyts
BUF1 BUF2
8bits 16bits 32bits 48bits 64bits 80bits
ASSUME SS: stack name, DS: data seg name, CS: code seg name
END directive(程序结束,最后一句语句)
END program name How to end a program MOV AH, 4CH INT 21H It is one of the main methods, utilizing the DOS function
PTR
Identifier / variable
(d) HIGH / LOW 变量 / 标号
必须用PTR的情况: a)双操作数指令(MOV, ADD, CMP, AND etc.): 目的 (内存直接寻址),源 (立即数) 不一致 目的 ( 内存 ), 源(立即数) 间/基/变/基+变 b)单操作数指令(INC, NEG etc.): 操作数为非直接寻址
概述伪指令简单程序分支程序循环程序查表程序子程序应用举例-精选

MOV P1,#00H
;否则,P3.4接高电平,点亮所有发光二极管
SJMP $
DDPING:MOV P1,#55H
;P3.4接地,发光二极管交叉亮灭
SJMP
$
END
A=0 A≠0 2019/10/24
2019/10/24
开始
读P3.4的管脚
P3.4接地?
N
点亮8个发 光二极管
Y
发光二极管 交叉亮灭
2019/10/24
7) 位地址定义伪指令BIT
格式:标号 BIT 位地址 该伪指令的功能是将位地址赋予BIT前面的标号,经赋值后 可用该标号代替BIT后面的位地址。例如:
PLG BIT F0 AI BIT P1.0 经以上伪指令定义后,在程序中就可以把FLG和AI作为位地 址来使用。
2019/10/24
结束
程序2流程图
程序3:使8个发光二极管顺序点亮。
ORG 0000H
START: MOV R2,#08H ;设置循环次数
MOV A,#0FEH ;送显示模式字
NEXT: MOV P1,A ;点亮连接P1.0的发光二极管
ACALL DELAY
RL A
;左移一位,改变显示模式字
DJNZ R2,NEXT ;循环次数减1,不为零,继续点亮下面一个二极管
为了用更接近人的语言编写程序,程序设计师们发明了
高级语言,如: BASIC、FORTRAN、PASCAL、
C、JAVA
然后再用编译系统将其翻译成机器语言,该过程称为编 译;
机器只能识别机器语言。所以必须用编译系统将高级语 言编写的源程序编译成机器语言,用汇编系统将用汇编
语言编写的源程序汇编成机器语言;
3-2-3 伪指令2

说明下列指令执行后,各寄存器的值= 说明下列指令执行后,各寄存器的值=? CODE SEGMENT CS:CODE,DS: ASSUME CS:CODE,DS:D1 START: AX,D1 START:MOV AX,D1 MOV DS,AX ;AX=? 3456H 直接寻址 AX,M2 MOV AX,M2 立即寻址, MOV SI,OFFSET M2 ;SI=? 0002H 立即寻址,取地址 ;CX=? 3456H 间接寻址 MOV CX,[SI] ;DX=? 7 间接相对寻址 DX,2 MOV DX,2[SI] … OFFSET的用途之 的用途之二 CODE ENDS OFFSET的用途之二: OFFSET用于任何存储器操作数 用于任何存储器操作数前 OFFSET用于任何存储器操作数前, 取操作数的有效地址。 取操作数的有效地址。 ~~~ 9
DATA … BUFF DATA CODE
SEGMENT
课堂作业
说明程序的功能 说明程序的功能
~~~
11
③变量的类型属性 变量的类型属性 定义数据的伪指令不仅定义了变量的地址属性, 而且决定了变量的类型属性。
伪指令 DB DW DD 类型 BYTE WORD DWORD 类型值 1 2 4
必须按类型访问变量, 必须按类型访问变量,否则出错 类型访问变量
34H 07H 00H
等价与
AX, M2 MOV AX,SEG M2 MOV DS, AX
一个段中的所有变量具有相同的段地址值! 一个段中的所有变量具有相同的段地址值! 段地址值
6
② 偏移ET 属性操作符 D1 SEGMENT M1 DB 1,2 3456H M2 DW 3456H,7 D1 ENDS 任何变量都具有偏移地址 任何变量都具有偏移地址 在变量名前用OFFSET操作符, OFFSET操作符 在变量名前用OFFSET操作符, 取变量的偏移地址值。 取变量的偏移地址值。
- 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.总结实验过程中遇到的问题及解决方法。