Ch04汇编语言程序组织课件

PPT
  • 阅读 54 次
  • 下载 0 次
  • 页数 145 页
  • 大小 490.001 KB
  • 2022-11-24 上传
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
此文档由【小橙橙】提供上传,收益归文档提供者,本网站只提供存储服务。若此文档侵犯了您的版权,欢迎进行违规举报版权认领
Ch04汇编语言程序组织课件
可在后台配置第一页与第二页中间广告代码
Ch04汇编语言程序组织课件
可在后台配置第二页与第三页中间广告代码
Ch04汇编语言程序组织课件
可在后台配置第三页与第四页中间广告代码
Ch04汇编语言程序组织课件
Ch04汇编语言程序组织课件
还剩10页未读,继续阅读
【这是免费文档,您可以免费阅读】
/ 145
  • 收藏
  • 违规举报
  • © 版权认领
下载文档40.00 元 加入VIP免费下载
文本内容

【文档说明】Ch04汇编语言程序组织课件.ppt,共(145)页,490.001 KB,由小橙橙上传

转载请保留链接:https://www.ichengzhen.cn/view-44460.html

以下为本文档部分文字说明:

汇编语言程序设计第四章汇编语言程序组织本章要求:①能够编写简单的、完整的汇编语言源程序。②掌握上机操作,以验证程序设计及编码的正确性。主要内容:汇编源程序结构、常用伪指令及操作符、汇编语言程序上机过程、数据的输入输出等。4

.1汇编语言语句格式4.2汇编语言源程序结构4.3常用伪指令4.4汇编语言操作符4.5汇编语言程序上机过程4.6调用ROMBIOS或DOS中断实现数据的输入输出4.7简化段定义4.1汇编语言语句格式汇编语句:指令、伪指令、宏指令。每条指令语句都生成机器代码,各对应一种CPU操作,在程序运行时

执行。伪指令语句由汇编程序在汇编过程中执行,数据定义语句分配存储空间,其他伪指令不生成目标码。宏指令是用户按照宏定义格式编写的一段程序,可以包含指令、伪指令、甚至其他宏指令。汇编语言语句格式:[名字]助记

符<操作数>[;注释]其中带[]的内容是可选的。4.2汇编语言源程序结构用汇编语言编写程序可以使用两种基本格式。一种是使用完整段定义,另一种是使用简化段定义。完整段定义格式需要较复杂的语法,但它可以提

供完整的控制,是大多数汇编程序通用的,也是软件开发中经常使用的。本节介绍使用完整段定义格式书写的汇编语言源程序。4.2.1典型的.EXE文件结构.EXE文件是一种可执行程序,它是一个可重定位的装入模块,可以包含多个段,文件的总长度可以超过64K,这种结构便于模块共享。.EX

E程序由文件头和程序本身的二进制代码两部分组成。DOS装入.EXE文件的过程:①DOS的装入程序为.EXE程序建立一个256字节的程序段前缀PSP,PSP中包含可以被用户程序使用的DOS入口、DOS为自己所存储

的信息、由DOS传递给用户程序的信息等。其中PSP:0处存放一条INT20H指令。②把文件头读入内存工作区。③计算可执行模块的大小。④计算装入的起始段地址。⑤完成重定位。⑥初始化段寄存器和指针寄存器。装入程序对段和指针寄存器的设置

为:CS:IP为主程序的入口地址(程序装入后执行的第一条指令地址)。SS为堆栈段的段基址,SP指向栈顶。其他段寄存器全部被初始化为指向PSP的段基址,以便用户能够访问PSP中的信息。⑦把控制权交给.EXE程序。例.编程实现123+456→SUM

单元的功能。(程序4.1)STASGSEGMENTSTACK‘S’;①DW32DUP(?)STASGENDSDATASEGMENTADW123BDW456SUMDW?DATAENDSCODESEGMENTM

AINPROCFAR;③ASSUMECS:CODE,DS:DATA,SS:STASG,ES:NOTHING;②PUSHDS;⑥XORAX,AXPUSHAXMOVAX,DATA;⑤MOVDS,AXMOVAX,A

ADDAX,BMOVSUM,AXRET;⑦推荐程序4.2MAINENDPCODEENDSENDMAIN;④以上两种.EXE结构编程时都可以使用。程序4.1结构使得对汇编语言编程及内部运行机制有更深入的了解,程序4.2使得程序更简洁。目前使用较多的.EXE结构是程序4.2所示结构。4.2.2典型的.

COM文件结构.COM文件是一种可执行程序,它的总长度不能超过64KB,整个文件只能由一个段组成。它没有文件头,只包含程序本身的二进制代码。这种结构代码紧凑,与实现同功能的.EXE文件相比,占用内存更少,速度更快,因此适合编制较小的程序,例如DOS

的外部命令SYS、FORMAT等都是.COM结构。程序段前缀PSP段长为100H字节,PSP:0处存放一条INT20H指令。程序的二进制代码紧跟PSP之后装入。.COM程序的代码、数据及堆栈数据在同一段中,所以对所有的段寄存器都初始化为指向PSP的段基址。IP=

100H,为PSP之后的下一个地址偏移量,SP指向栈顶,栈顶中存入一个字型数字0,如下图所示。对于实现上例的.COM结构的程序见程序4.3。CODESEGMENT;程序4.3ORG100HASSUMECS:CODE,DS:

CODEMAINPROCNEARJMPSTARTADW123BDW456SUMDW?START:MOVAX,AADDAX,BMOVSUM,AXRETMAINENDPCODEENDSENDMAIN同样道理,返回DOS功能也可以用以下两条指令替换:MOVAX

,4C00HINT21H替换后的.COM程序结构见程序4.4。4.3常用伪指令4.3.1数据定义伪指令格式:[变量名]助记符操作数功能:为变量分配单元,并为其初始化或者只预留空间。说明:①变量名是可选

的,需要时由用户自己起。②助记符是数据类型的符号表示。助记符数据类型一个数据项字节数DB(BYTE)字节型1DW(WORD)字型2DD(DWORD)双字型4DQ(QWORD)四字型8DF(FWORD)六字节型6DT(TBYTE)10

字节型10注:()中是在MASM6.11版本中可以使用的助记符。DF助记符386以上有效,通常作为48位全指针变量。必须掌握DB、DW、DD。③操作数操作数可以是数字常量、数值表达式、字符串常量、地址表达式、?、<n>DUP(操作数,……)形式

。a.数字常量及数值表达式十进制数:以D结尾,汇编语言中缺省值是十进制数,所以D可以省略不写。有效数字是0~9。二进制数:以B结尾,有效数字是0、1。例如,10100011B,10100011b。十六进制数:以H结尾,有效数字是0~9和A(a)~F(f)。若第一位数字是

字母形式,则必须在前边加上0(数字)。例如,12H,12h,0AB56H,0ab56h。八进制数:以Q或O(字母)结尾,有效数字是0~7。例如,352Q。b.字符串常量c.地址表达式d.?e.<n>DUP

(操作数,……)例.M1DB15,67H,11110000B,?M2DB‘15’,’AB$’M3DW4*5M4DD1234HM5DB2DUP(5,’A’)M6DWM2;M2的偏移量M7DDM2;M2的偏移量、段基址设以上数据自1470:0000开始存放,则为:0F67F0003135414224

14003412000005410541040004007014。可直接通过变量名引用变量,但要注意类型匹配。例如以下程序片段:MOVAL,M1;(AL)=15MOVBX,M3;(BX)=20ADDM3,6;(M3)=26MOV

AL,M2;(AL)=’1’=31HMOVBL,M2+2;(BL)=’A’=41HMOVM1+3,BL;(M1+3)=41H4.3.2LABEL伪指令格式:名字LABEL类型功能:为下一个存储单元起一个名字并定义它的类型

。说明:对于变量,类型可以是BYTE、WORD、DWORD等。对于标号,其类型可以是NEAR、FAR。LABEL伪指令并不为名字分配空间,但它可以为下一个存储单元另起名字而且另定义它的类型,从而可以使同一地址具有不同类型的名字,便于引用。例.REDEWLABELWORDDEBY

TEDB25H,32H,56H,42HMOVBL,DEBYTE;(BL)=25HMOVCX,REDEW;(CX)=3225H以上程序片段执行情况见下图。4.3.3符号定义伪指令1.等值EQU伪指令格式

:符号名EQU表达式功能:用符号名代表表达式或表达式的值。说明:表达式可以是任何有效的操作数格式。例如常数、数值表达式、另一符号名或助记符。注意:用EQU定义的符号在同一个程序中不能再定义。例.CREQU0DH;回车符的ASCII值LFEQU0AH;换行符的ASCII值BELEQU07

H;响铃符的ASCII值PORT_BEQU61H;定义PORT_B端口BEQU[BP+6];[BP+6]用B表示程序中可以通过符号引用这些值,例如:MOVAL,CR;等价于MOVAL,0DHADDBL,B;等价于ADDBL,[BP+6])OUTPORT_B,AL;输出到61H端

口EQU用途:增加程序可读性、缩短程序书写长度、避免因为某些修改而带来的程序不一致性。EQU伪指令除了以上用途外,经常使用它的一个场合是与$配合,得到变量分配的字节数。如下所示:MSGDB‘Thisisfirststring.’Cou

ntequ$-msgMovcl,count;(CL)=MSG的串长=21由于用EQU定义的符号在同一个程序中不能再定义,所以以下语句是错误的:CTEQU1CTEQUCT+12.等号(=)伪指令格式:符号名=数值表达式功能:

用符号名代替数值表达式的值说明:等号伪指令与EQU伪指令功能相似,其区别是等号伪指令的表达式只能是常数或数值表达式,另外用“=”定义的符号在同一个程序中可以再定义。通常在程序中用“=”定义常数。例.DPL1=20HK=1K=K+14.3.4对准伪指令格式:EVEN功能:定位到偶地址。也可以用ALI

GN4定位到双字地址。例.ORG50HA1DB3EVENA2DW5030500EVEN语句的效果50H51H52H53H4.3.5结构伪指令结构定义使得多个存储区具有相同的数据格式。例如在日常生活中经常用到的二维表格数据,就可以用结构来定义。例.为某单位设计一个工资表,工资表中有三

项内容:姓名、职称、工资。该单位共有32个职工。工资表格式和每项数据的长度或范围如下所示。数据项姓名职称工资字段名NAMPOSTWAGES字段长度、类型或数值范围10字节、字符12字节、字符0~65535、数字工资表格式1.结构定义伪

指令格式:结构名STRUC...结构名ENDS功能:定义一种结构。例如,对于以上工资表,可以定义如下结构:PAYROLLSTRUCNAMDB10DUP('A')POSTDB'ENGINEER'WAGESDW?PAYROLLENDS注意:结构定义

伪指令中虽然包含了数据定义语句,但仅仅是定义了某种格式的结构(例如PAYROLL),并没有给它分配空间。为了给结构数据分配空间,需要用结构预置语句。2.结构预置语句格式:结构变量名结构名<字段值表>功能:为结构变量分配存储

空间及初始化。对字段值的说明:①字段值表必须用<>括起来;若只给出<>表示各字段均采用结构定义时的初值。②若给出字段值表,则字段值间要用逗号隔开。③只能对简单字段赋初值,对于多重字段的位置应直接用逗号隔开,相当于占位,不可省略。若对某字段所赋初值的长度与结构定义

中的不符,不足者用空格填充,超出者被截去。④DUP操作数可以出现在结构预置中,用以分配多个同样结构的数据。为上例工资表分配32条记录空间的程序片段如下:NO1PAYROLL<>;1号职工的记录,各字段采用结构定义初值NO2PAYRO

LL<,'WORKER',1200>;为2号职工的记录初始化NO3_32PAYROLL30DUP(<>);DUP为3~32号职工定义30条相同结构的记录经过以上语句定义,这个工资表的初始存储分配情况如下所示。偏移量结构变量名NAMPOSTWAGESNO1NO1AAAAAAAAAAENGINE

ERㄩㄩㄩㄩNO2NO2AAAAAAAAAAWORKERㄩㄩㄩㄩㄩㄩ1200NO3_32NO3_32AAAAAAAAAAENGINEERㄩㄩㄩㄩNO3_32+24*1AAAAAAAAAAENGINEERㄩㄩㄩㄩ.........NO

3_32+24*29AAAAAAAAAAENGINEERㄩㄩㄩㄩ注:ㄩ表示空格,占用一个字符位置。工资表初值3.访问结构变量⑴结构变量名这种格式可以访问到结构变量级。它访问的是结构变量中的第一个字节值(视结构中的第一个字段的类型

决定,例如若是用DW定义,则为第一个字)。例.LEABX,NO1;把结构变量NO1的首地址送BX⑵结构变量.字段名这种格式可以访问到结构变量中的字段值。例如:MOVNO1.WAGES,1200;为1号职工的工资字段赋值1200MOVAX,N

O1.WAGES;取1号职工的工资送给AX从以上可以看出,这里引用的结构变量实际上是使用它的偏移量,偏移量可以通过基址寄存器BX或BP表示。若使用BX,则段寄存器默认为DS;若使用BP,则段寄存器默认为SS。允许使用段超越前缀

。例如:LEABX,NO3_32MOV[BX].WAGES,1500;为3号职工的工资字段赋值1500⑶结构变量.结构字段[变址寄存器]这种格式可以访问到结构变量中某字段的某个字节,该字节距离字段首的位移由变址寄存器SI或DI给出。例如:L

EABX,NO3_32MOV[BX].WAGES,1500XORSI,SIMOV[BX].NAM[SI],’C’;字符C送给3号职工姓名字段的第一个字节注意结构定义、预置和存取三者的顺序及位置一般应遵从:结构定义在数据段前出现,预置在数

据段中出现,访问在代码段中出现。程序4.5给出以上例子的完整程序。运行以上程序后,该工资表的数据示意图如下所示。偏移量结构变量名NAMPOSTWAGESNO1NO1AAAAAAAAAAENGINEERㄩㄩㄩㄩNO2NO2AAAAAAAAAAWORKERㄩㄩㄩㄩㄩㄩ1200

NO3_32NO3_32CAAAAAAAAAENGINEERㄩㄩㄩㄩNO3_32+24*1AAAAAAAAAAENGINEERㄩㄩㄩㄩ.........NO3_32+24*29AAAAAAAAAAENGINEERㄩㄩㄩㄩ注:ㄩ表示空格,占用一个字符位置。程序4.5运行后的工资表120015

00编写一个循环程序并递增修改SI的值,可以对一个字段的各个字节实现存取。同样道理,通过每次给BX增加一条记录的长度(本例是加24),可以存取到不同的记录。4.3.6微处理器伪指令较常使用的选择微处理器伪指令有以下几种:伪指令功能.286选择

80286微处理器指令系统.386选择80386微处理器指令系统.486选择80486微处理器指令系统.586选择80586微处理器指令系统.8087选择8087数字协处理器指令系统.287选择80287数字协处理器指令系统.387选择80387数字

协处理器指令系统注意较低版本的汇编程序并不完全支持这一组伪指令。例如即使在Pentium上使用MASM5.0,也不支持.586伪指令。由于向下兼容,所以在Pentium机器上仍然可以使用.386伪指令。4.4汇编语言操作符操作符可以出现在语句的操作数

表达式中。该操作在汇编程序汇编时实现。包括算术、逻辑、关系、属性、返回值操作符。例.XDW12,34,56CTEQU($-X)/2MOVCX,CT;(CX)=3MOVAX,XADDAX,X+2;(AX)=461.算术操作符2.逻辑操作符例.POR

TEQU0FHANDDL,PORTAND0FEH汇编后:ANDDL,0EH3.关系操作符例.指令MOVAL,CHLT20的汇编结果:MOVAL,0FFH;当CH<20时或:MOVAL,0;当CH≥20时4.返回值操作符这组操作符可以把一些特征或内存单元地址的组成部分作为数值返回。

它们是TYPE、LENGTH、SIZE、SEG、OFFSET和$,其格式和功能见下表。例.VARDW50DUP(12)ARYDW4,5,6COUNTEQU$-OFFSETARY;COUNT=6MOVAX,SEGVARMOVDS,AX;VAR的段基址→DSADD

SI,TYPEARY;(SI)+2→SIMOVCX,LENGTHVAR;50→CXMOVCX,SIZEVAR;100→CXMOVCX,LENGTHARY;1→CXMOVCX,SIZEARY;2→CX5.属性操作符属性操作符指定操作数的属

性。包括PTR、THIS、SHORT、HIGH和LOW操作符。(1)PTR操作符格式:类型PTR地址表达式功能:指定地址表达式的类型。例.BUFDB31H,32HMOVAL,BUF;(AL)=31HMOVBX,WORDPTRBUF;临时指定BUF为字型,

(BX)=3231HLEADI,BUFMOVBYTEPTR[DI],6;明确指出DI指向字节型单元,否则汇编时出错(2)THIS操作符格式:THIS类型功能:为存储器操作数指定类型。该操作数地址与下一个存储单元具有相同的段基址和偏移量。例

1.REDEWEQUTHISWORDDEBYTEDB25H,32H,56H,42HREDEW和DEBYTE的段基址和偏移量均相同,但类型不同前者是字型,后者是字节型。例2.F_JMPEQUTHISFARN_JMP:DECCX使“DECCX”指令具有一个FAR属性的地址F_JMP。(3)S

HORT操作符用来修饰JMP指令中转向地址的属性,指出转向地址是在下一条指令地址的-128~+127字节范围之内。例如:JMPSHORTLAB(4)HIGH、LOW操作符这两个操作符被称为字节分离操作符,它接收一个数字或地址表达式,HIGH取其高字节,LOW取其低字节。例.COUNTEQU

1234HMOVAL,LOWCOUNT汇编结果为:MOVAL,34H4.5汇编语言程序上机过程汇编语言实践环境基于DOS平台。当汇编语言源程序编好后,要使其实现功能,需经过以下过程:建立、编辑汇编连接运行调试4.5.1.E

XE文件上机过程以程序4.1(名字为ADD1.ASM)为例,介绍汇编语言程序上机过程。1.建立文件可以用任何一种熟悉的文本编辑器建立、编辑汇编语言源程序。例如DOS提供的EDIT。启动EDIT的常用命令格式是:EDIT[文件名]

其中文件名是可选的。若启动时不带文件名,对于已存在文件,启动后可以用FILE下拉菜单的OPEN命令打开它并对其编辑,最后用FILE下拉菜单的SAVE保存。对于新文件则可以直接输入,最后用FILE下拉菜单的SAVEAS保存。若启动时带有文件名但该文件

不存在,则启动后可以输入新文件,否则把已存在的文件调入编辑。对于汇编语言源程序,其文件名的扩展名部分必须是.ASM。例如:D:\MASM>EDITADD1.ASM则屏幕显示:FileEditSearchViewOptionsHelp|----

----D:\masm\ADD1.ASM-------|若EDIT是从Windows环境的MS-DOS方式进入的,则在DOS提示符后键入exit返回Windows。2.汇编汇编程序的基本功能是把用汇编语言书写的源程序翻译成机器语言的目标代码、检查用户源程序中的错误且显示出错信息、生

成列表文件等。为了适应模块化程序要求,汇编后目标程序中的地址部分是可浮动的相对地址,而不是可执行的绝对地址。在DOS平台上使用较普遍的汇编程序是MASM和TASM。下边是Microsoft公司MASM5.X版的汇编操作。首先在DOS提示符

后键入MASM命令:D:\MASM>MASM屏幕显示:Microsoft(R)MacroAssemblerVersion5.10...Sourcefilename[.ASM]:ADD1(输入源文件名ADD1,不必输入扩展

名)Objectfilename[ADD1.OBJ]:(要求回答目标文件名,可直接按Enter确认)Sourcelisting[NUL.LST]:ADD1(列表文件名,需要时输入名字部分)Cross-reference[NUL.CR

F]:(交叉引用文件名,缺省情况不产生)51058+421678Bytessymbolspacefree0WarningErrors0SevereErrors也可以用命令行的形式按顺序对四个提示予以回答,其

格式是:MASM源文件名,目标文件名,列表文件名,交叉引用文件名;若只想对部分提示给出回答,则在相应位置用逗号隔开,若不想对剩余部分作答,则用分号结束。例如以下命令行与前边的分行回答等效:D:\MASM>MASMADD1,,ADD1;ADD1.LST文件的内容为:;偏移量

目标码汇编格式……0000DATASEGMENT0000007BADW123……SegmentsandGroups:NameLengthAlignCombineClassCODE……0014PARANONEDATA……

0006PARANONESTSG……0040PARASTACK‘S’3.连接程序被汇编通过后,需要经过连接才能执行。连接程序的功能是连接分别产生的目标模块、解决外部交叉调用、产生一个可重定位的装入模块、以及产生可选的内存映象文件等。在DOS平台上使用较普遍的连接程

序是LINK和TLINK。下边是MicrosoftLinker的连接操作。D:\MASM>LINKObjectModules[.OBJ]:ADD1(输入由汇编产生的.OBJ目标文件名)RunFile[ADD1.EXE]:(直接回车确认系统给出的默认可执行

文件名)ListFile[NUL.MAP]:ADD1(输入内存映象文件名,缺省不产生)Libraries[.LIB]:(直接按回车键)对于以上回答,ADD1.OBJ经连接后在当前目录下产生了ADD1.EXE和ADD1.MAP文件。ADD1.MAP文件的内容为:StartStop

LengthNameClass00000H0003FH00040HSTSGS00040H00045H00006HDATA00050H00063H00014HCODEProgramentrypointat0005:0000同样可以用命令行的形式按顺序对四个提示予以回答,格式:LINK目

标文件名,可执行文件名,内存映象文件名,库文件名;其中都不必给出扩展名,连接程序会按照缺省情况使用。若只想对部分提示给出回答,则在相应位置用逗号隔开,若不想对剩余部分作答,则用分号结束。经过建立、汇编和连接,关于ADD1.ASM共生成以下文件:ADD1ASM1,164

09-03-0121:06ADD1.ASMADD1LST2,62909-03-0121:06ADD1.LSTADD1OBJ15209-03-0121:06ADD1.OBJADD1MAP23209-03-0121:07ADD1.MAPADD

1EXE61209-03-0121:07ADD1.EXE5file(s)4,789bytes从6.0版以后,Microsoft公司把MASM和LINK的功能由一个ML.EXE程序完成,只需一个命令就可把源程序汇编连接生成.EXE文件。而不

再需要分两步操作。ML.EXE的常用命令格式:ML[/Fl][/Fm][/Fr][/c]source_filename.ext其中source_filename.ext为汇编语言源程序的文件名,扩展名不能省略。[]中的F必须大写,l(字母)、m、r和c必须小写,各可选项含义如下:/F

l:产生.lst列表文件,缺省不产生/Fm:产生.map内存映象文件,缺省不产生。/Fr:产生.sbr交叉参考文件,缺省不产生。/c:只产生.obj文件,不产生.exe文件。缺省只产生.exe文件。例.ML/FlTEST.ASM以上命令会对已存在的T

EST.ASM文件汇编且连接,并在当前目录下生成一个列表文件TEST.LST和一个可执行文件TEST.EXE。4.运行例.D:\MASM>ADD1D:\MASM>DEBUGADD1.EXE-5.调试(1

)用反汇编命令U显示可执行代码-u1307:00001EPUSHDS1307:000133C0XORAX,AX1307:000350PUSHAX1307:0004B80613MOVAX,13061307:00078ED8MOVDS,AX1307:0009A10000MOVAX,[0000]1

307:000C03060200ADDAX,[0002]1307:0010A30400MOV[0004],AX1307:0013CBRETF(2)用R命令显示寄存器值-rAX=0000BX=0000CX=0064DX=0000SP=0040

BP=0000SI=0000DI=0000DS=12F2ES=12F2SS=1302CS=1307IP=0000NVUPEIPLNZNAPONC1307:00001EPUSHDS以上为程序装入后寄存器初始设置,注意DS和ES的值,它们现在指向PSP的段基址。标志位值的符号表

示:标志位OFDFIFSFZFAFPFCF(=1)OVDNEINGZRACPECY(=0)NVUPDIPLNZNAPONC(3)用G命令执行正在被调试的程序到断点-g9AX=1306BX=0000CX=0064DX=0000SP

=003CBP=0000SI=0000DI=0000DS=1306ES=12F2SS=1302CS=1307IP=0009NVUPEIPLZRNAPENC1307:0009A10000MOVAX,[0000]DS:0000=007B(4)用D命令查看数据-dds:0f130

6:00007B00C80100000000-0000000000000000...............(5)用T命令跟踪执行程序-tAX=0243BX=0000CX=0064DX=0000SP=003CBP=0000SI=

0000DI=0000DS=1306ES=12F2SS=1302CS=1307IP=0010NVUPEIPLNZACPONC1307:0010A30400MOV[0004],AXDS:0004=0000-

tAX=0243BX=0000CX=0064DX=0000SP=003CBP=0000SI=0000DI=0000DS=1306ES=12F2SS=1302CS=1307IP=0013NVUPEIPLNZACPONC1307:0013

CBRETF(6)在返回前用D命令看程序的执行结果-dds:0f1306:00007B00C80143020000-0000000000000000{...C...........1306:0004单元中的4302是结果579的十六进制逆序表示形式。(7)用Q命令退出D

EBUG返回到操作系统-qD:\MASM>①建立文件:editprog4_3.asm②汇编:masmprog4_3;③连接:linkprog4_3;④转换:exe2binprog4_3.exeprog4_3.com⑤删除.exe文件:delprog4_3.exe⑥执行.com文件:pro

g4_3⑦调试:debugprog4_3.com4.5.2.com结构文件上机过程可以看出,它与.EXE文件上机过程类似,只是在连接后所生成的.EXE文件不能直接运行,而需要使用DOS命令EXE2BIN把.EXE转换成.COM文件,然后删除连接所生成的.EXE文件,执行和调试均是

对转换后的.COM文件进行操作。4.6调用ROMBIOS或DOS中断实现数据的输入输出1.键盘中断调用16H16H中断服务子程序提供了多个功能,每个功能对应一个功能号。调用它们的方法是:①功能号→AH②INT16H4.6.1使用ROMBIOS中断调用主要功能简述如下:功能号功

能返回参数0等待从键盘读字符AL=字符的ASCII值,AH=扫描码1读键盘缓冲区字符若ZF=1,表示缓冲区空;否则表示缓冲区不空,则AL=ASCII值,AH=扫描码2返回键盘状态字节AL=键盘状态字节说明:对于2号

功能,AL中返回的键盘状态字节各位含义如下:1=按下右Shift键1=按下左Shift键1=按下Ctrl键1=按下Alt键1=ScrollLock状态改变1=NumLock状态改变1=CapsLock

状态改变1=Insert状态改变位76543210例1.从键盘接收一个字符,并送入CHAR变量。CHARDB?MOVAH,0INT16H;等待从键盘接收一个字符MOVCHAR,AL;接收到的字符保存也可以用1号功能完成上述功能,如下所示:CHARDB

?LOP:MOVAH,1INT16H;读键盘缓冲区JZLOP;若缓冲区无字符可取则循环等待MOVCHAR,AL;接收到的字符保存例2.设启动时初始化键盘为改写状态。编写能够实现以下要求的程序段:若按了Insert

键,则转入插入处理,否则继续处于改写状态。MOVAH,2INT16HTESTAL,80HJNZINSERT...INSERT:...;插入处理2.显示器中断调用10H计算机的显示器有单色和彩色之分,它们可以工作于文本方式和图形方式。本节

只介绍与文本方式有关的部分功能。显示器在文本方式下可以工作于40×25、80×25等显示方式。字符的属性确定了每个要显示字符的特性,例如字符是否闪烁、彩色字符的颜色等。下图是彩色文本显示的属性字节。下表

给出了16种字符颜色的组合,它也适用于图形方式。当前景和背景选择相同颜色组合时,字符便无法看见。⑴设置显示模式功能号:0调用参数:AL=显示模式。例1.设置显示器为80×25彩色文本模式。MOVAH,0MOVAL,3INT10H⑵初始

化窗口或窗口内容向上卷动功能号:6调用参数:AL=上卷行数BH=空白区属性CH=窗口左上角行号CL=窗口左上角列号DH=窗口右下角行号DL=窗口右下角列号例2.清屏,并设置为蓝底白字属性。MOVAH,6MOVAL,0MOVBH,1FH;蓝

底白字属性MOVCX,0MOVDH,24MOVDL,4FHINT10H例3.开一个窗口,并设置属性为白色背景黑色前景。MOVAH,6MOVAL,0MOVBH,70H;白色背景黑色前景MOVCH,10;左上角行号MOVCL,20;

左上角列号MOVDH,20;右下角行号MOVDL,60;右下角列号INT10H⑶设置光标位置功能号:2调用参数:BH=页号,DH=光标行号DL=光标列号例4.设置光标在10行20列。MOVAH,2;设置光标MOVBH,0MOV

DH,10MOVDL,20INT10H⑷读光标位置功能号:3调用参数:BH=页号返回参数:CH=光标开始行,CL=光标结束行,DH=光标所在行号,DL=光标所在列号例5.取光标当前位置MOVAH,3MOVBH,0INT10H⑸在当前光标位置显示属性和字符功能号:9调用参数:AL=字

符的ASCII码,BL=字符的属性,BH=页号,CX=字符重复个数例6.在当前光标位置显示一个黑底黄*。MOVAH,9MOVAL,'*'MOVBH,0MOVBL,0EHMOVCX,1INT10H⑹以TTY(电传打字机)方式显示字符功能号:0EH调用参数:AL=字符的ASCII码BH=页号例

7.当出现错误需要发声警告时,可以输出响铃字符。MOVAH,0EHMOVAL,7;响铃字符的ASCII值INT10H⑺显示字符串及属性功能号:13H说明:此功能对8086/8088无效。调用参数:ES:BP=串首地址,CX=串长度,BH=页号,BL=属性(AL

=2或3有效),DH=起始行号,DL=起始列号,AL=写字符方式例8.键盘及显示器中断调用综合举例。程序4.6是10H和16H中断调用的应用实例。它可以实现清屏、开窗口、设置光标、窗口内容上卷、显示字符和属性、显示字符串等功能。为运行

时方便观察,例如能够看到字符显示、窗口上卷及光标移动等情况,程序中用两个INT16H功能,以便停下来观察,并等待击键后继续执行。程序4.6WWidth=40;窗口宽度WLeftTopLine=10;左上角行号WLeftTopRow=20;左上角列号WRightBot

tomLine=20;右下角行号WRightBottomRow=WLeftTopRow+WWidth-1;右下角列号Collor=70H;白色背景黑色前景CR=0DH;回车LF=0AH;换行STACKS

GSEGMENTSTACK'S'DW64DUP('ST')STACKSGENDSDATASEGMENTSTRINGDB'exampletocallinterrupt10H';要显示的字符串CTEQU$-STRING;串长DATAEND

SCODESEGMENTASSUMECS:CODE,DS:DATA,ES:DATA,SS:STACKSGMAINPROCFARMOVAX,DATAMOVDS,AXMOVES,AX;ES、DS指向同一个段MOVAH,0;置为80×25彩色文本方式MOVAL

,3INT10HMOVAH,6;清屏MOVAL,0MOVBH,1FHMOVCX,0MOVDX,184FHINT10HMOVAH,6;开窗口,并设为白背景黑色前景MOVAL,0MOVBH,CollorMOVCH,WLeftTopLineMOVCL,WLeftTopRowM

OVDH,WRightBottomLineMOVDL,WRightBottomRowINT10HMOVAH,2;设置光标到窗口左下角MOVBH,0MOVDH,WRightBottomLineMOVDL,WLe

ftTopRowINT10HMOVAH,9;在当前光标处显示一个黑底黄*MOVAL,'*‘MOVBH,0MOVBL,0EHMOVCX,1INT10HMOVAH,0EH;显示回车MOVAL,CRINT10HMOVAH,0EH

;显示换行MOVAL,LFINT10HMOVAH,3;读光标位置MOVBH,0INT10H;返回光标的当前行位置在DH中CMPDH,WRightBottomLine+1;光标当前位置是窗口底行的下一行?JNEL1;不是转MOVAH,6;是,则整个窗口上卷一行MOVA

L,1MOVBH,CollorMOVCH,WLeftTopLineMOVCL,WLeftTopRowMOVDH,WRightBottomLineMOVDL,WRightBottomRowINT10HMOVAH,2;光标设置到窗口的左下角MOVBH,0

MOVDH,WRightBottomLineMOVDL,WLeftTopRowINT10HL1:MOVAH,9MOVAL,STRING;显示STRING中第一个TMOVBH,0MOVBL,4FH;红底白字MOVCX,1INT10HMOVAH

,0;等待按任意键INT16HMOVAH,13H;显示STRING变量自第二个字符h开始的串MOVAL,01;光标跟随移动MOVBH,0MOVBL,COLLOR;属性字节MOVCX,CTMOVDH,WRightBottomLineMOVDL,

WLeftTopRow+1LEABP,STRING+1INT10HMOVAH,0;等待按任意键INT16HMOVAX,4C00HINT21HMAINENDPCODEENDSENDMAIN4.6.2使用

DOS系统功能调用每种操作系统都为用户提供了使用输入输出设备的系统资源。这些资源不同于ROMBIOS,它们对硬件的依赖性更少,兼容性较好、使用更方便。1.带回显的字符输入并识别Ctrl-C键功能号:1返回参数:AL=输入字符的ASCII值例.输入一个字符到CHAR变量中。CHARDB?MOVAH

,1INT21HMOVCHAR,AL2.输出一个字符功能号:2调用参数:DL=字符的ASCII值说明:该输出功能使光标跟随移动。例.输出一个字符Y。MOVAH,2MOVDL,’Y’INT21H3.输入字符串功能号:0AH调用参数

:DS:DX指向自定义的输入缓冲区首地址功能:从标准输入设备(例如键盘)输入一串字符到用户定义的缓冲区,直到按下Enter键为止。在接收的同时显示到屏幕上,并且识别Ctrl-C键,也处理DOS编辑键。例.定义60个字符的缓冲区,并输入一串字符。BUFFERDB60;定义缓冲区长度DB?DB60D

UP(?);设DS已是BUFFER的段基址MOVAH,0AH;接收一串字符LEADX,BUFFERINT21H4.输出字符串功能号:9调用参数:DS:DX指向要输出的以$结尾的字符串首地址功能:输出字符串到标准输出设备说明:要输出的字符串必须以$结束例.PRINTDB’Toi

nput:’,’$’;以$结尾的要输出的字符串;设DS已指向PRINT的段基址MOVAH,9LEADX,PRINTINT21H;输出字符串“Toinput:”到显示器综合举例:编程实现输出“Toinput:”的提示信息,并等待

从键盘输入一串字符送给BUFFER缓冲区,见程序4.7。4.7简化段定义简化段定义是MASM5.0版以后提供的,它较容易使用,和高级语言连接也比较容易,但这种格式并不适用于大多数汇编程序。读者可以按照自己的习惯选择完整段或简化段定义结构。本节简介简化段定义常用结构及与

其有关的伪指令。1.简化段定义常用结构程序4.8给出简化段定义常用结构。注意:当.386等选择处理器伪指令出现在.model之前时表示缺省选择32位指令模式,出现在.model之后时表示缺省选择16位指令模式

。2.简化段定义常用结构中的伪指令(1)定义存储模型伪指令常用格式:.model存储模型功能:定义存储模型。常用的存储模型有:①TINY②SMALL③MEDIUM④COMPACT⑤LARGE⑥HUGE⑦FLAT(2)定义堆栈段尺寸伪指令格式:.stacksize功能:建

立一个堆栈段并定义其大小说明:若不指定size参数,则使用缺省值1KB,这对大部分程序来讲足够用。3.有关的预定义符号@CODE:代码段段名。@DATA:由.DATA和.STACK定义的段集合成的组名。@FARDATA:独

立数据段的段名。这些预定义符号类似于用EQU伪指令定义的符号,它们可以在程序中被引用。例如:MOVAX,@DATAMOVDS,AX4.简化段定义举例例.在屏幕上显示一串字符。源程序设该程序名为simp.asm,则对其汇编可以使用以下命令:c>ml

/Flsimp.asm汇编连接后生成simp.lst和simp.exe文件,运行simp.exe后屏幕显示“Hello!”。显然,与完整段定义相比,.startup和.exit伪指令的引入方便程序设计人员。注

意:当.386等选择处理器伪指令出现在.model伪指令之前时不能用.startup和.exit,否则汇编时出错。

小橙橙
小橙橙
文档分享,欢迎浏览!
  • 文档 25747
  • 被下载 7
  • 被收藏 0
相关资源
广告代码123
若发现您的权益受到侵害,请立即联系客服,我们会尽快为您处理。侵权客服QQ:395972555 (支持时间:9:00-21:00) 公众号
Powered by 太赞文库
×
确认删除?