




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机原理计算机原理*24.1概述4.2汇编语言源程序的格式4.3伪指令操作4.4DOS功能调用4.5汇编语言程序设计
第四章汇编语言程序设计计算机原理*3机器语言(MachineLanguage):二进制表示的指令和数据。汇编语言(AssemblyLanguage):
助记符来编写指令,地址和数据也可用符号表示。用汇编语言编写的程序必须翻译成机器语言目标程序(或目标代码)才能执行,这种翻译过程称为汇编。高级语言:不针对某个具体的计算机,通用性强。但高级语言编写的源程序同样必须“翻译”成机器语言,计算机才能执行,所用的系统软件称为编译程序或解释程序。第四章汇编语言程序设计4.1概述第四章汇编语言程序设计4.1概述第四章汇编语言程序设计4.1概述计算机原理*4用汇编语言编写源程序,经过汇编程序和连接程序生成目标程序和执行程序。
文件名.ASM
文件名.OBJ
文件名.EXE汇编语言源程序
汇编目标程序连接执行程序编辑程序EDIT.EXE汇编程序MASM.EXE连接程序LINK.EXE第四章汇编语言程序设计4.1概述计算机原理*5用文本编辑程序编写汇编语言源程序,产生扩展名为.ASM的源文件;用汇编语言编写的源程序经过汇编程序MASM.EXE自动翻译成目标程序,产生扩展名为.OBJ的目标文件;用链接程序LINK.EXE将目标程序链接产生扩展名为.EXE的可执行程序。用Debug.EXE进行调试。编译器可采用MicrosoftMASM或者BorlandTASM第四章汇编语言程序设计4.1概述计算机原理*6汇编程序(MASM.EXE)的主要功能是:将汇编语言源程序翻译成机器语言;按程序员指定,分配存储区域(包括程序区,数据区,堆栈区等);将各种进位制数据转换成二进制数;把字符转换成ASCII码;计算出数值表达式的值;对源程序进行检查,如果有指令错或程序格式错则给出相应提示。第四章汇编语言程序设计4.1概述计算机原理*7在8086/8088汇编语言中,有两类汇编语言指令,一类是执行性指令,另一类是说明性指令。对执行性指令,汇编程序都为之产生机器指令代码;而说明性指令的作用仅仅是告诉汇编程序对源程序中的执行性指令应该如何产生代码,或分配存储区。1、执行性指令“执行性指令”又称“指令语句”。这类语句经汇编后总有目标程序与之对应,按其与汇编后目标程序对应情况又可分为两种类型:一般性执行性指令和宏指令。执行性指令的功能主要由其对应的目标程序在运行时来实现。
第四章汇编语言程序设计4.1概述计算机原理*8(1)一般性执行指令:这种指令是一条指令对应一条8086/8088的机器指令,即指令系统中包括的指令。(2)宏指令:这种指令是由伪操作定义的。宏指令是一般性指令的扩展。(3)执行性指令的格式
[标号:][前缀]指令助记符[操作数表][;注释]其中[]表示根据不同的指令或不同情况可以任选的部分。操作数表是由逗号分隔开的多个操作数。标号代表“:”后指令的存储地址,供JMP,CALL和LOOP等指令操作使用。除此之外,它还具备一些其他“属性”。第四章汇编语言程序设计4.1概述计算机原理*9前缀
是8086/8088中一些特殊指令,它们同其他指令配合使用,如“串操作指令”的重复指令REP。指令助记符包括8086/8088指令助记符以及用宏定义语句定义过的宏指令名。操作数对8086/8088的一般性执行指令来说,可以是一个或二个操作数,这时我们称左边的操作数为目标操作数,右边的操作数为源操作数,对宏指令来说,可能有多个操作数,操作数之间有逗号隔开。注释以“;”开始,用来简要说明该指令在程序中的作用,以提高程序的可读性。第四章汇编语言程序设计4.1概述计算机原理*102、说明性指令(伪指令)“说明性指令”又称“指示性语句”。由伪操作符定义,用于程序以源程序方式同“汇编程序”通信。程序采用说明性指令表示源程序的起始终止信息、分段情况、内存结构和变量说明等信息。说明性指令的功能由汇编程序来完成。说明性指令在汇编时不产生任何代码。说明性指令的格式如下:
[名字]伪操作指令[操作数表][;注释]
其中“名字”可以是标识符定义的常量名、变量名、过程名、段名以及结构名*或记录名*等。所谓标识符是由字母、数字、特殊字符(如?或下划线)等组成的字符串。第四章汇编语言程序设计4.1概述计算机原理*11汇编语言源程序的例子
DATASEGMENT;定义数据段
DATA1DB0F8H,60H,0ACH,74H,3BH;被加数
DATA2DB0C1H,36H,9EH,0D5H,20H;加数
DATAENDS;数据段结束
CODESEGMENT;定义代码段
ASSUMECS:CODE,DS:DATA;告诉汇编程序段范围
START:MOVAX,DATAMOVDS,AX;初始化DSMOVCX,5;循环次数送CXMOVSI,0;置SI初值为零第四章汇编语言程序设计4.2汇编语言源程序的格式第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*12CLC;清CF标志LOOPER:MOVAL,DATA2[SI];取一个字节加数
ADCDATA1[SI],AL;与被加数相加
INCSI;SI加1指向下一字节
DECCX ;计数器CX减1JNZLOOPER ;不等于零,转LOOPERMOVAH,4CH;系统功能调用,AH=4CINT21H;退出并返回DOSCODEENDS;代码段结束
ENDSTART;源程序结束,指定起始地址标号第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*13常用的汇编语言源程序框架:
DATASEGMENT ;定义数据段
VAL1DB12H,8EH;定义变量
……DATAENDS ;数据段结束
STACKSEGMENTSTACK……STACKENDSEXTRASEGMENT……EXTRAENDS
堆栈段数据段扩展段第四章汇编语言程序设计4.2汇编语言源程序的格式第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*14CODESEGMENT ;定义代码段
ASSUMECS:CODE,DS:DATA,ES:EXTRA,SS:STACK;段属性说明START:MOVAX,DATA;初始化DSMOVDS,AXMOVAX,EXTRA;初始化ESMOVES,AXMOVAX,STACK;初始化SSMOVSS,AX ……MOVAX,4C00H ;返回DOSINT21HCODEENDS;代码段结束
ENDSTART ;源程序结束第四章汇编语言程序设计4.2汇编语言源程序的格式第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*15汇编语言的语句执行/指令性语句:可以产生相应的机器码,与机器指令相对应。
LOOPER:MOVAL,DATA[SI]指示性语句(伪操作指令):不产生机器码,仅为汇编程序提供汇编时所需要的信息。如:datalDW12abH该语句将告诉汇编程序data1定义为一个字12abH,汇编程序将为它分配一个存储器地址,而且把该存储单元与下一个存储单元初始化为abH和12H。第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*16宏指令语句
为了书写方便,把一个汇编语句序列用一条指令代替,这种指令称为宏指令。由宏指令组成的语句称为宏指令语句。在汇编时,凡是有宏指令的地方将用相应的汇编语句序列取代,所以宏指令可以产生目标代码。例如:funmacrox;x是形式参数
mov
ah,x
int21h
endm则fun为宏指令,使用时直接写成:fun2;其中2是宏参数,汇编时产生:
movah,2
int21h
两条语句,并将它们汇编成目标代码。第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*17汇编语言语句的格式⑴指令语句格式
标号:助记符操作数,‥,操作数;注释
⑵伪指令语句格式
名字助记符参数,‥,参数;注释
⑶宏指令语句格式
宏指令名实参数,‥,实参数;注释第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*181、标识符标识符即标号和名字,标号和名字的区别是标号后面必须跟冒号,而名字后面没有冒号。一个标号与一条指令的地址的符号名相联系,即标号是符号地址。例如上面的示例程序中Start是标号。名字可以是变量名、段名、过程名等,例如上面的示例程序中DATA、CODE是段名,Data1、Data2是变量名。汇编语言中的几个基本概念第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*19
2、保留字保留字是一个汇编语言中预先保留下来的具有特殊含义的符号,这些符号不能滥用。
如:SEGMENTENDSOFFSETSIZEDBDWDDMOVPUSHADDSUBMULDIVINCDECLOOPPROCENDPCALLRETEND
第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*203、数的表示⑴常数:
二进(B)、八进(O)、十进(D)和十六进(H)制数,注意十六进制数若以字母开头,前面要加数字0。缺省情况下是十进制数,但可用伪指令RADIXn来改变缺省的基数。⑵字符串常数:用单引号括起来的一个或多个字符组成一个字符串常数,例如:‘Therezultis:’在内存中。以字符的ASCII码值存放,注意一个空格也是一个字符。如‘The’,在内存中是54H、68H、65H和20H。第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*214、变量
变量是代表存放在某些存储单元的数据。这些数据在程序运行期间随时可以修改。变量有三个属性:段属性、偏移属性和类型属性。⑴变量的定义与预置①定义变量就是给变量分配存储单元,且对该存储单元赋于一个符号名—变量名,同时预置初值。定义变量用数据定义伪指令DB、DW、DD、DQ、DT等。例:VAR_DATASEGMENTdata1DB12Hdata2DW5678HVAR_DATAENDS第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*22②变量的属性
ⅰ段属性(SEG):表示变量存放在那一个逻辑段中,例如上面定义的变量名data1和data2存放在VAR_DATA逻辑段中。对它们进行存取时要先将它们所在段的段基值放在DS中,即执行下面语句:
mov
ax,VAR_DATA
mov
ds,ax
ⅱ段的偏移属性(offset):表示变量在逻辑段中离段起点的字节数。如上面的data1的偏移量为0,data2的偏移量为1。
变量的段属性和偏移属性构成了变量的逻辑地址。
ⅲ类型属性(type):表示变量占用存储单元的字节数
DB1字节,DW2字节,DD4字节,
DQ8字节,DT10字节第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*23⑵
数据定义伪指令
格式:变量名伪指令名表达式1,表达式2,‥‥
这里表达式有以下几种情况:
①数值表达式例:DA_BYTEDB50H,50,0caHDA_WORDDW0a3f1H,498dH
②?表达式,不带引号的?表示可预置任何内容例:DA_BDB?,?;要求分配两个字节单元
DA_WDW?,?;要求分配两个字单元
③字符串表达式数据项可以写成字符串形式,但只能用DB、DW、DD定义,而且DW、DD语句定义的串只允许包含两个字符。参看下面的例子。第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*24注意:定义多于两个以上字符的字符串时,只能使用DB伪指令,不能使用DW和DD等伪指令。例:S1 DB‘ABCDEF’S2 DW‘AB’,‘CD’,‘EF’S3 DD‘AB’,‘CD’
这几个变量在存储器中存放情况如下:S141HS242HS342H42H41H41H
43H44H00H44H43H00H45H46H44H46H45H43H00H00H第四章汇编语言程序设计4.2汇编语言源程序的格式第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*25
可以用DW语句把变量或标号的偏移地址存入存储器;也可用DD语句把变量或标号的段地址和偏移地址都存入存储器,此时低位字存偏移地址,高位字存段地址,例如:VAR DW 1234HLABEL:MOVAL,04H… PRVDDVAR PRLDWLABELPRRDDLABEL
…PRVPRLPRRVAR的偏移地址VAR的段地址LABEL的偏移地址LABEL的偏移地址LABEL的段地址第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*26④
带DUP表达式,DUP是定义重复数据操作符格式:
变量名数据定义伪指令表达式1DUP(表达式2)其中表达式1是重复次数,表达式2是重复内容。例:D_B1DB20HDUP(?);保留20H个字节
D_B2DB10HDUP(‘ABCD’);字符串‘ABCD’
;重复10H次
D_W1DW10HDUP(4);字4重复10H次
ARRAYDB100DUP(0,2DUP(1,2),0,3)
;定义ARRAY700个字节⑤‘$’符号,表示地址计数器的当前值
第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*27例:ARRAYDW1,2,$+4,3,4,$+4
如果在汇编时,ARRAY的偏移地址是0074H,则在ARRAY数组中,两个$+4得到的结果是不同的,这是由于$的值是在不断变化的。此定义在存储器中的表示如下图所示。
$用在伪操作的参数字段时,和用在指令中的情况是不同的,用在伪操作中它表示的是地址计数器的当前值。用在指令中它只表示该指令的首地址,而与$本身所在的字节无关。例如指令JNE$+6表示满足条件时转移到该指令的首地址加6以后所在的单元。
1000:2543JNE$+6则转移地址是2549H.第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*2801H00H03H00H04H00H82H00HARRAY00H02H00H7CH01HARRAY00H01HARRAY02H00H01HARRAY00H02H00H01HARRAY7CH00H02H00H01HARRAY00H7CH00H02H00H01HARRAY03H00H7CH00H02H00H01HARRAY00H03H00H7CH00H02H00H01HARRAY04H00H03H00H7CH00H02H00H01HARRAY00H04H00H03H00H7CH00H02H00H01HARRAY82H00H04H00H03H00H7CH00H02H00H01HARRAY00H82H00H04H00H03H00H7CH00H02H00H01HARRAY第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*29例4-1:下面的数据段定义,COUNT表示什么?
DATASEGMENTBUFDB‘0123456789ABCD’ COUNTEQU$-BUFDATAENDS这里,COUNT的值就是数据区的长度,所以COUNT=145、标号
标号是一条指令的目标代码的符号地址,它常用作转移指令(或子程序调用指令)的操作数。标号有三个属性:段属性、偏移属性和类型属性。段属性是该标号的段地址,偏移属性是该标号的偏移地址,类型属性是表示该标号的范围是本段(NEAR)或段间(FAR),或称为近或远属性。第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*306、表达式和运算符表达式由常数、操作数、操作符和运算符组成。有六种运算符,即算术运算符、逻辑运算符和关系运算符、分析运算符、综合运算符和分离运算符。1、算术运算符+、-、*、/、MOD(取余)、SHL(左移)、SHR(右移)例:32MOD5;结果为2MOVDX,BLOCK+(6-1)*22、逻辑运算符(按位操作)
AND(与) OR(或) XOR(异或) NOT(非)
例:INAL,Port_VALOUTPort_VALANDOFEH,AL 第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*313、关系运算符关系运算是逻辑判定,当为真时结果为全1(0FFFFH),为假时结果为全0。
EQ(等于);若PP=25,则25EQPP=0FFFFHNE(不等于);25NEPP=0LT(小于);25LT26=0FFFFHLE(小于等于);25LEPP=0FFFFHGT(大于);26GTPP=0FFFFHGE(大于等于);24GEPP=0关系运算符一般不单独使用,常与其它运算符结合使用。例如:ADDAX,((portGT60)AND50)OR((portLE60)AND70)当port的值>60时,上述指令汇编为ADDAX,50当port的值≤60时,上述指令汇编为ADDAX,70第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*324、分析运算符把存储器地址操作数分解成它的组成部分。
SEG(求段地址),格式:SEG﹤符号名﹥
OFFSET(求偏移地址),格式:OFFSET﹤符号名﹥
TYPE(求符号名类型值),格式:TYPE﹤符号名﹥
SIZE求为符号名分配的字节数格式:SIZE﹤符号名﹥
回送分配给该符号名的字节数,但此值是LENGTH的值和TYPE的值的乘积。类型byteworddwordqwordtbyteNEARFAR类型值124810-1(FFH)-2(FEH)第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*33LENGTH,求为符号名分配的项数。格式:LENGTH﹤符号名﹥
这里为符号名定义的数据项必须是用重复格式DUP()定义的。而对于其他情况则回送1。例
:K2DW10DUP(?)
则LENGTHK2=10 TYPEK2=2 SIZEK2=20
例:AARRDW2,4,6
则LENGTHAARR=1,TYPEAARR=2SIZEAARR=2可以看出:
SIZE<符号名>=(LENGTH<符号名>)*(TYPE﹤符号名﹥)第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*345、综合运算符
⑴定义符号名为新类型/类型属性操作符格式:﹤类型﹥PTR﹤符号名﹥
PTR的功能归纳如下:
①保证运算时操作数类型的匹配
例:F1 DB16H,38H F2DW 1234H,26ABH MOVAX,WORDPTRF1 ;AX=3816H MOVBL,BYTEPTRF2 ;BL=34H第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*35②通过PTR指明是字单元还是字节单元例:MOVBYTEPTR[BX],10H;[BX]为字节单元
MOVWORDPTR[SI],20H;[SI]为字单元③用PTR来改变距离属性例:JMPFARPTRLLOOP CALLDWORDPTR[BX] ⑵指定新类型
格式:﹤符号名﹥EQUTHIS﹤类型﹥
例:LABCEQUTHISBYTE;LABC是字节类型
LABDDW4321H,2255H;LABD是字类型
MOVAL,LABC;AL=21HMOVAX,LABD;AX=4321H第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*366、分离运算符
⑴取低字节格式:LOW﹤符号名﹥
⑵
取高字节格式:HIGH﹤符号名﹥
例:设SSY=2050H
moval,LOW3080H;al=80H
movah,HIGHSSY;ah=20H
mov
cl,LOW3a4bH;cl=4bH7、专用运算符8、其它运算符如果需要,请参考相关的参考书。9、汇编运算符的优先级第四章汇编语言程序设计4.2汇编语言源程序的格式计算机原理*374.3伪指令操作
伪指令没有对应的机器指令,不是由CPU执行,而是由汇编程序识别,并完成相应的功能。伪指令越多,应用越方便,MASM86的伪指令可分为14类。
1、符号定义伪指令
﹤符号名﹥EQU﹤表达式﹥﹤符号名﹥
=﹤表达式﹥
例:port1EQU78port2EQUport1+2counterEQUcx
;定义为寄存器
cbdEQUDAA;定义为助记符
A=6 A=A+2
第四章汇编语言程序设计4.3伪指令操作第四章汇编语言程序设计4.3伪指令操作计算机原理*38=和EQU的区别是用=定义的符号名在同一程序中可以重复定义,而用EQU定义的符号名在同一程序中不允许重复定义。
EQU与特殊运算符PTR或THIS连用,可以给变量或标号定义新的类型属性并重新命名,但其段属性和偏移属性不变。例:某一程序段中有以下几条伪指令语句,试分析个变量的属性。
DATA SEGMENTDDBUFEQUTHISDWORD BUF DB100DUP(?)
DWBUFEQUWORDPTRBUFDATA ENDS…FIRSTEQUTHISFAR;定义远标号,其段属性和偏移
LEASI,BUF;属性与紧跟其后指令的存储地址相同
…DDBUF,BUF,DWBUF分别是双字类型、字节类型和字类型,它们为同一数据区的首址。第四章汇编语言程序设计4.3伪指令操作计算机原理*392、内存数据定义伪指令
DB定义字节(前面已讲过定义方法)
DW定义字(2字节)
DD定义双字(4字节)
DQ定义8字节
DT定义10字节3、段定义伪指令
﹤段名﹥SEGMENT[定位方式][连接方式][‘类别名’]…
﹤段名﹥ENDS
⑴定位方式
PAGE指定起始地址的低8位是0PARA指定起始地址的低4位是0(隐含)
WORD指定起始地址的最低位是0BYTE指定起始地址是任意值第四章汇编语言程序设计4.3伪指令操作计算机原理*40⑵连接方式(组合类型)组合类型告诉连接程序本段与其它段的关系。有NONE,PUBLIC,COMMON,STACK,MEMORY和AT6种。缺省下是NONE,表示本段与其他段逻辑上不发生关系。STACK则指定该段在运行时为堆栈段的一部分。(参看相关参考书)。⑶‘类别名’类别名是用单引号括起来的字符串,连接程序只使同类别的段发生关联。
4、段寄存器说明伪指令
ASSUME段寄存器:段定义名1[,段寄存器:段定义名2,…]
例:ASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACK第四章汇编语言程序设计4.3伪指令操作计算机原理*415、过程(子程序)定义伪指令
﹤过程名﹥PROC[NEAR或FAR];
NEAR可省略
…
﹤过程名﹥ENDP调用过程的格式为:
CALL﹤过程名﹥过程返回
RET ;段内返回
RETF ;段间返回第四章汇编语言程序设计4.3伪指令操作计算机原理*426、定位伪指令格式:ORG﹤表达式﹥这里表达式是一个无符号数,表示以下的程序或数据的开始地址。例4-2:下面程序段,指出变量BUF和NUM的偏移地址为多少?DATA SEGMENT ORG10 BUFDB ‘ABCD’ ORG$+5 NUMDW 50DATA ENDS
变量BUF的偏移地址为10;变量NUM的偏移地址为19第四章汇编语言程序设计4.3伪指令操作计算机原理*437、对准伪操作
格式:EVEN
;使下一个字节地址成为偶数。8、基数控制伪操作指令
格式:RADIX表达式该表达式表示进制的基数值(2-16),注意用十进制表示
其它类型的伪指令及宏指令,请参看相关的参考书。第四章汇编语言程序设计4.3伪指令操作计算机原理*44
通常把DOS提供的INT21H中断服务程序称为DOS功能调用,调用时根据AH的值来选择子功能。AH=1键盘键入并回显,输入字符的ASCII码在AL中返回例:MOVAH,1INT21HAH=2显示输出字符,输出字符的ASCII码放入DL中例:MOVAH,2 MOVDL,‘A’INT21HAH=7键盘输入无回显,输入字符的ASCII码在AL中返回例:MOVAH,7INT21H第四章汇编语言程序设计4.4DOS功能调用第四章汇编语言程序设计4.4DOS功能调用计算机原理*45AH=9显示字符串,字符串以‘$’结束,开始位置用DS:DX指示例:MOVAX,MY_DATAMOVDS,AXLEADX,StringMOVAH,9INT21HAH=4C程序运行结束,返回操作系统,返回码由AL给出例:MOVAX,4C00HINT21H第四章汇编语言程序设计4.4DOS功能调用计算机原理*461、程序编制及调试汇编语言源程序的编制
编辑环境:EDIT、ULTRAEDIT、NOTEPAD等。存盘形式:ASCII形式注意:编辑好的源程序必须以扩展名.ASM来命名。汇编源程序的编译将汇编源程序转换成目标(OBJ)文件编译器:MICROSOFTMASM5.0+、BROLANDTASM2.0+存盘形式:Binary形式注意:编译完成后生成扩展名为.OBJ的目标文件。如果源程序有语法错误,则给出相应的错误提示及错误代码。连接将一个目标文件或者多个目标文件连接(再定位)生成可执行文件。第四章汇编语言程序设计4.5汇编语言程序设计第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*47连接器:MICROSOFTLINK5.0+、BROLANDTLINK2.0+存盘形式:Binary形式.COM文件与.EXE文件的区别1、.COM文件是内存映像文件,执行时直接装入内存即可执行。其中代码段、数据段、堆栈段等的段地址完全相同。一般程序长度小于64KB。装入执行速度相对较快。2、.EXE文件不是内存映像文件,执行时需要把代码段、数据段、堆栈段等重新定位,然后才能够执行。程序长度可以大于64KB。装入执行速度相对较慢。3、不论是.COM文件还是.EXE文件装入内存时都产生一个PSP(程序前缀段),里面是程序运行的一些基本信息,存放在程序的开始位置0-FFH,PSP的长度是256Byte。调试
调试工具:DEBUG、TDEBUG。
第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*48常用的汇编语言程序框架:
DATA SEGMENT ;定义数据段
VAL1DB12H,8EH ;定义变量
……DATA ENDS ;数据段结束STACKSEGMENTSTACK……STACKENDSEXTRASEGMENT……EXTRAENDSCODESEGMENT ;定义代码段ASSUMECS:CODE,DS:DATA,ES:EXTRA,SS:STACK;段属性说明START:MOVAX,DATA ;初始化DSMOVDS,AXMOVAX,EXTRA;初始化ESMOVES,AXMOVAX,STACK;初始化SSMOVSS,AX……
第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*49MOVAX,4C00H ;返回DOSINT21HCODEENDS ;代码段结束ENDSTART ;源程序结束第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*502、开发调试例程例4-2编写一个.EXE文件,显示’Hello!’并响铃
(Test1.asm)
Datasegment;定义数据段
stringdb‘Hello!’,7,’$’ Dataends Stacksegmentstack ;定义堆栈段
db256dup(0) Stackends Codesegment;代码段开始
assumecs:Code,ds:Data,ss:Stack
Start:movax,data
mov
ds,ax leadx,string;取String的有效地址
movah,09h
int21h;调用dos的09号功能
movah,4c
int21h;退出
codeendsendstart第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*51将程序存盘为Test1.asmd:\>masmTest1 ;编译程序,不需加.asm
扩展名d:\>linkTest1 ;连接程序,不需加.obj
扩展名编译时,当执行d:\>masmTest1时,屏幕会出现
Objectfilename[Test1.OBJ]: Sourcelisting[NUL.LST]: Cross-reference[NUL.CRF]:如果有语法错误,则还会出现类似的错误提示:Test1.ASM(18):errorA2056:Immediatemodeillegal编译输入为.ASM文件,输出有三个文件:.OBJ,二进制目标文件.LST,列表文件,该文件列出源程序和机器码清单,并给出符号表,以便调试。该文件可有可无。.CRF,用于产生交叉引用表,给出用户定义的所有符号及所在行号。该文件可有可无。第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*52例2编写一个.COM文件
codesegmentassumecs:code,ds:code,ss:code,es:code org100h ;伪指令,表示下面代码的偏移地
mainprocfar ;址从100h处开始
leadx,string
movah,09h
int21h
movax,4c00h
int21h mainendp stringdb‘Hello!’,7,’$’ ;数据定义
codeends endmain第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*53DEBUG调试命令介绍
DEBUG软件是DOS系统下的汇编语言调试分析工具,在DOS下执行DEBUG.EXE出现提示符‘-’,进入到DEBUG调试环境。默认条件为:
默认使用十六进制数据,并且不用加后缀H;地址一般由段地址和偏移量组成,若在命令中不指明段地址,默认使用DS中的段地址。进入DEBUG后,可按Q键退出,或按?查看帮助。第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*54命令介绍汇编命令A(Assemble)一般用法:-A;从当前地址输入汇编源程序
-A地址;从指定位置输入汇编程序反汇编命令U(Unassemble)一般用法:-U;从当前位置将机器码反汇编成源程序
-U地址;从指定位置将机器码反汇编成源程序
-U地址1地址2;按照指定位置将机器码反汇编;成源程序,地址1为开始位置,;地址2为结束位置第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*55Debug环境下执行汇编命令A所见画面Debug环境下执行反汇编命令U所见画面第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*56显示内存命令D(Display)
-D ;从当前位置开始显示128个字节的内容
-D地址;从指定位置开始显示128个字节的内容
-D地址1地址2;功能同上,地址1为起始地址,;地址2为结束地址修改内存单元命令E(Editor)
-E地址 ;显示指定内存单元的内容,并修改
-E地址数据;修改指定地址的内存单元的内容,
;多个数据可以用空格隔开,用回车;完成修改例:-e100‘Hello’7‘$’;单引号表示输入ASCII码第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*57Debug环境下执行显示内存命令d后所见画面Debug环境下执行显示寄存器命令r后所见画面第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*58显示和修改寄存器命令R(Register)
-R ;显示所有寄存器的内容
-R寄存器名;显示并修改指定寄存器的内容在DEBUG环境中用一些符号表示标志位,说明如下:
标志逻辑真逻辑假标志逻辑真逻辑假
OFOVNVAFACNADFDNUPPFPEPOIFEIDICFCYNCSFNGPL没有TF:跟踪单步标志
ZFZRNZ第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*59执行命令G(Go)-G;从当前IP指示的地址开始执行程序
-G=起始地址;从指定的地址开始执行程序
-G=起始地址断点地址;从指定的地址开始执行程序,并;执行到断点处暂停单步执行指令T和PT:跟踪进入子程序
P:不跟踪进入子程序一般用法:-T;执行一条指令
-Tn;执行n条指令其他指令:N(定义名字)W(写磁盘)L(从磁盘装入)退出命令:Q;退出DEBUG,返回DOS第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*60在debug环境下编制汇编程序写汇编程序
MOVDX,10CMOVAH,9;显示字符串,DS:DX=串地址;‘$’=结束符
INT21;DOS功能调用
MOVAH,4C ;带返回码结束,AL=返回码
INT21写数据-E10C‘Hello!’7‘$’运行程序-G=100取程序名字-NT;默认存放在当前目录设置程序长度
-RBX ;设置程序长度
:0 ;64K的倍数
-RCX ;设置程序长度
:20 ;字节数第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*61写入磁盘:-W
;存盘,若未指定地址则从CS:0100H开始,
;要写入的文件字节数应先放入BX和CX中 执行:-G=100或退出DEBUG后,在DOS下执行T装入程序:-NT-L;把文件装入存储器,若未指定地址,则数据从CS:0100H开始第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*621、顺序结构程序设计第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*63例4.3从键盘输入一个小写字母,转换成大写字母输出。分析:AH=1,int21h从键盘输入一个字符并回显AH=2,int21h输出一个字符,输出字符的ASCII码放在DL中字符ASCII码
a-z 61h–7AhA–Z 41h–5Ah;4_3.asmDataSegmentstring1db‘Pleaseinput(a–z):$’string2db0dh,0ah,‘Theresultis:$’DataEndsStacksegmentstackdb256dup(?)StackEndsCodeSegmentassumecs:code,ss:stack,ds:datamainprocfarstart:mov
ax,data
第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*64
mov
ds,ax leadx,string1
movah,9 ;显示提示符1
int21h
movah,1 ;输入小写字符
int21hsubal,20hpushaxleadx,string2
movah,9;显示提示符2
int21hpopax
movah,2;输出大写字符
movdl,al
int21h
movax,4c00h
int21h ;返回DOSmainendpcodeendsendstart第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*65例4.4在数据段中存放两个32位二进制无符号数DATA1和DATA2,编制一程序计算两数之和,结果存于RESULT单元中。分析:;4_4.asmdatasegmentdata1dd1565764587data2dd1293773646resultdd?dataendsstacksegmentstack
dw128dup(0)stackendsdata1data2result+高16位低16位CF第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*66codesegmentassumecs:code,ds:data,ss:stackmainprocfarstart: pushds
movax,0 pushax
movax,data
mov
ds,ax
movax,wordptrdata1 ;低16位相加
addax,wordptrdata2
movwordptrresult,ax
movax,wordptrdata1+2
adcax,wordptrdata2+2;高16位相加
movwordptrresult+2,ax
retfMainendpCodeendsEndstart第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*67例4.5以16进制形式显示存储器中一个字节的无符号数VAR。例如:11010101显示D5分析:将一个字节分为高4位,低4位两部分先显示高4位,后显示低4位,显示时若用int21h中的2号子功能,需要字符的ASCII码数值字符ASCII码
0000~10010~930h~39h 1010~1111A~F41h~46h;4_5.asmdatasegment
var db100dataendsstacksegmentstackdb 256dup(?)Stackends第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*68Codesegmentassumecs:code,ds:data,ss:stackmainprocfar
movax,data
mov
ds,ax
moval,var
mov
dh,al
movcl,4
shral,clcallubasccallpchar
moval,dhcallubasc
callpchar
movax,4c00h
int21hmainendp;显示一个字符pcharproc
movah,02h
movdl,al
int21h
ret
pchar
endp;将AL的低4位转换为ASCII码ubascprocandal,0fh
addal,30h
cmpal,‘9’
jnaubasc1
addal,07h
ubasc1:retubasc
endpcodeendsendstart;ubascproc;andal,0fh;addal,90h;daa;adcal,40h;daa;ret;ubasc
endp;将AL的低4位转换为ASCII的另一种方法第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*692、分支结构程序设计第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*70二分支结构例4.6在数据段中有两个16位二进制无符号数DATA1和DATA2,找出其中较小数,并存于MIN中。;4_6.asmdatasegmentdata1dw2000hdata2dw3f80hmindw?dataendsstacksegmentstackdb256dup(?)stackendscodesegmentassumecs:code,ds:data,ss:stackmainprocfarpushds
movax,0pushax
movax,data
mov
ds,ax
movax,data1
cmpax,data2
jnaenext
movax,data2next:
movmin,axretmainendpcodeendsendmain第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*71三分支结构例4.7判断变量var中的值,若为正数,在result中存入0001H;为负数,在result中存入FFFFH;为零,在result中存入0000H。;4_7.asmdatasegment
var
dw2000hresultdw0dataendsstacksegmentstack
dw100dup(0)stackendscodesegmentassumecs:code,ds:data,ss:stackmainprocfar pushds
movax,0pushax
movax,data
mov
ds,ax
movax,var
cmpax,0
jlless
jggreat
movax,0
jmpshortnextless:
movax,0ffffh
jmpshortnextgreat:
movax,0001hnext:
movresult,axretmainendpcodeendsendmain
第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*72多分支机构例4.8根据内存字节变量control被置位的情况控制程序转移到8个子程序中的一个。;4_8.asmdatasegment
brn_tab
dwsubr1,subr2,subr3
dwsubr4,subr5,subr6
dwsubr7,subr8controldb40hdataendsstacksegmentstackdb100dup(0)stackendscodesegmentassumecs:code,ds:data,ss:stackmainprocfarStart:pushds
xor
ax,ax变量control转入子程序00000001subr100000010subr200000100subr300001000subr400010000subr500100000subr601000000subr710000000subr8第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*73pushax
movax,data
mov
ds,axleabx,brn_tab
moval,controlgtbit:
rcral,1
jc
getagaddbx,2
jmpshortgtbitgetag:call[bx]retmainendpsubr1proc……retsubr1endp...subr8proc……retsubr8endpcodeendsendmain第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*743、循环程序设计第四章汇编语言程序设计4.5汇编语言程序设计计算机原理*75单重循环例4.9在数据段中以buffer单元开始存放10个16位二进制有符号数,把其中最大数找出来存于MAX单元中,试编程。;4_9.asmdatasegmentbufferdw-100,300
dw5281,222
dw4262,9232
dw2238,-3632
dw-3144,6322countequ($-buffer)/2maxdw?dataendsstacksegmentstackdb256dup(?)stackends
codesegment assumecs:code,ds:data,ss:stackmainprocfarstart:pushds
movax,0pushaxmovax,datamov
ds,axleabx,buffermov
cx,count-1movax,[bx]circle:incbxin
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 连续进位乘法(教学设计)-2024-2025学年三年级上册数学人教版
- 牛顿第一定律高一上学期物理粤教版(2019)必修第一册
- 第14课《网络身份认证》教学设计 2024-2025学年浙教版(2023)初中信息技术八年级上册
- 八年级地理上册 4.4 民俗与旅游教学实录 (新版)粤教版
- 2023一年级语文下册 第三单元 语文园地配套教学实录 新人教版
- 2023七年级数学下册 第10章 相交线、平行线与平移10.4 平移教学实录 (新版)沪科版
- Unit 1 Animal Friends全单元5课时教学设计 2024-2025学年人教版英语七年级下册
- 2025工程主体施工合同
- 七年级地理上册 3.1 多变的天气教学实录1 (新版)新人教版
- 捉迷藏(教学设计)-2024-2025学年三年级上册人音版(2012)音乐
- 亮化工程售后服务方案及优惠承诺
- 物业服务礼仪礼貌培训七大要点
- 2025-2030中国儿童服装行业深度调研及投资前景预测研究报告
- 2025年温州职业技术学院单招职业技能考试题库必考题
- 2025年高考物理模拟试卷1(广东卷)及答案
- 《颅内血肿教学查房》课件
- 2025新人教版七下英语单词默写表
- 人教版一年级数学上册《6-10的认识和加减法》同步练习题及答案
- 二十案例示轮回
- 老年营养示范化病房创建方案
- 设备安全操作培训
评论
0/150
提交评论