第四章、汇编语言程序设计_第1页
第四章、汇编语言程序设计_第2页
第四章、汇编语言程序设计_第3页
第四章、汇编语言程序设计_第4页
第四章、汇编语言程序设计_第5页
已阅读5页,还剩140页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章、汇编语言程序设计举例徐承彬汇编语言程序的上机过程为运行汇编语言程序需要在磁盘上建立如下文件1、编辑程序,如edit.exe2、汇编程序,如masm.exe3、连接程序,如link.exe4、调试程序,如debug.exe一、利用编辑程序建立asm

文件1、进入dos环境一、用edit程序编辑asm文件二、用masm程序产生obj

文件汇编程序的版本号是list文件,称为列表文件。该文件给出源程序和机器语言程序清单,并给出符号表,该文件可有可无。是crf文件,该文件用来产生交叉引用表ref。对一般的程序不需要建立此文件。三、用link程序产生exe文件是连接程序的列表文件,又称为连接映像,给出每个段在存储器的分配情况。是程序中需要的库文件,,如无特殊需要,则应对[Lis]:回答四、程序的执行汇编语言程序设计举例

1、直线型程序设计四、程序设计举例1、直线运行程序例如:求两个数的平均值。两个数分别放在X和Y单元中,结果放在Z单元中。设两个数分别为32和64编程如下:DATEsegmentXDB20HYDB40HX20Y40ZDB?DATEENDSCODEsegmentASSUMECS:CODE,

DS:DATESTART:MOVAX,DATEMOVDS,AXMOVAL,XMOVAL,XADDAL,YMOVAH,00HADCAH,00HMOVBL,02HDIVBLMOVZ,ALCODEENDSENDSTART例2、内存中自TABLE开始的七个单元中,连续存放着自然数0~6的平方值。任意一个数X(0≤X≤6)在FIRST单元中,要求查表找出X的平方值,把结果送入SECOND单元。TABLE00010409101924FIRSTXSECOND-DATASEGMENTTABLEDB0,1,4,9,16,25,36FRSTDB4SECONDDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATAMOVAX,DATAMOVDS,AXMOVBX,OFFSETTABLEMOVAL,FIRSTXLATMOVSECOND,ALCODEENDSEND常用系统功能调用01H号读取键盘字符并回显(单字符)调用方式MOVAH,01HINT21H说明等待按键若是CTRL-BREAK则退出其他键,将其ASCLL码送AL寄存器,同时送显示器显示02H号显示字符调用方式MOVAH,02HINT21HDL要显示字符的ASCLL码说明将置入DL寄存器的字符送显示器显示08H号键盘输入单字符不显示调用方式MOVAH,08HINT21H说明将输入的字符送AL寄存器09H号字符串输出显示调用方式DX要显示字符串的首地址MOVAH,08HINT21H说明要显示的字符串一般定义在数据段该字符串必须以定界符“$”为结束标志“$”字符不显示STRINGDB‘Howareyou’,‘$’例如:

MOVDX,OFFSETSTRINGMOVAH,09HINT21H0AH号字符串输入

调用方式DX接收字符串缓冲区的首地址MOVAH,0AHINT21H说明从键盘接收字符串到内存指定的缓冲区,直到回车为止

缓冲区的第一个字节为指定缓冲区的字符个数

缓冲区的第二个字节保留,填写实际输入字符的个数

缓冲区的第三个字节开始存入输入的字符

例如:

DATASEGMENTBUFDB80DB?DB80DUP(?)DATAENDS4CH号结束程序返回操作系统调用方式MOVAH,4CHINT21H2、分支程序设计分支程序:根据某种判断结果,从两个以上的程序中选择一个执行。条件分支段1分支段2或条件分支段2例3、比较两个无符号数的大小,把大数存入MAX单元。DATEsegment

SHUJUDBX1,X2

MAXDB?

MAXDB?

DATEENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

MOVAX,DATA

MOVDS,AX

MOVAL,SHUJU

CMPAL,SHUJU+1JABRANCHBRANCH:MOVMAX,ALMOVAL,SHUJU+1CODEENDSENDMOVAH,4CHINT21H从键盘输入0----7中的一个数,然后将数字转换成对应位为1的8位二进制数存入AL中,根据AL中哪一位为1转入相应的分支程序处,实现散转,设8个分支程序分别显示‘A’----’H’中的一个。分析:输入0

AL00000001显示’A’输入1AL00000010显示’B’输入2AL00000100显示’C’输入3AL00001000显示’D’输入7AL10000000显示’H’实际:输入0AL0011000000000001输入10011000100000010AL输入30011001100001000AL输入70011011110000000AL设置初值寄存器DL00000001移动次数由AL低4位得到送CL寄存器移动DL后送显示

CodesegmentAssumecs:code

Start:Movdl,01h

shuru:movah,1Int21hCmp

al,’q’JzexitAndal,0fhCmpal,0Jz

shuchuMov

cl,alShl

dl,clShuchu:cmpdl,01hJzchu1Cmpdl,02h

Shuchu:cmpdl,01hJzchu1Cmpdl,02hJzchu2

cmpdl,04hJzchu3

cmpdl,08hCmpdl,10hJzchu4Cmpdl,20hJzchu5Cmpdl,40hJzchu6Cmpdl,80hJzchu7chu1:movdl,’a’Jmp

xianshiChu2:movdl,’b’Jmp

xianshiChu3:movdl,’c’Jmp

xianshiXianshi:movah,2Int21hLoopshuruExit:movah,4chInt21hCodeendsEndstart

3、循环程序设计循环程序一般由四部分组成循环初值循环次数,循环正常工作的初始状态循环体循环工作的主体部分,为完成特定功能而设计的程序段修改部分保证每次循环时,相关信息发生有规律的变化,为下一次循环作准备循环控制部分控制循环的运行和结束例4、从XX单元开始10个连续单元中存放有10个无符号数,从中找出最大者送YY单元。XXYY分析ALDatasegment

Xxdb15,22,16,9,3,44,26,88,39,52

Yydb?

Dataends

Codesegment

Assumecs:code,ds:data

Assumecs:code,ds:data

Movax,dataMov

ds,axMoval,xxMoval,xxleabx,xxincbx

Cmpal,[bx]Mov

cx,9JaenextXchgal,[bx]Loopnext:loop1:loop1Mov

yy,alMovah,4chInt21hCodeendsEnd设数据段有8个有符号数:MUNDB-19,28,33,-45,55,61-67,255。设计要求:

1、统计并显示负数的个数。2、找出最大的数,并以16进制的形式显示在屏幕上。格式为:MAX=XXH。例5:

把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来分析:BX16位

BHBL

1001

1100

001101019C359C350---30H十六进制数:

0123456789ABCDEF1---31H2---32H3---33H9---39H

A---41H

B---42H

C---43H

D--44H

E---45H

F---46HBXBHBL1001

1100

001101019C3500111001循环左移4位

1100

001101011001C359BLAL01011001屏蔽AL高4位00001001

AL与30H相或0011100139HCodesgement

Assumecs:code

Start:movch,4Loop1:movcl,4

Rol

bx,cl

Mov

al,blAndal,0fhAddal,30h

Cmpal,3ah

Jl

shuchuAddal,07hShuchu:mov

dl,al

Movah,2Int21hDecch

Jnzloop1Movah,4chInt21hCodeendsEndstart用冒泡法排序有一个首地址为A的N字数组,编程实现数组中的数从大到小排序分析:序号123456数85168432181

AL8855165165584321821684321885384321816854843218168558432181685排序程序设计

DataseggmentAdw8,5,16,84,32,18,

ndw$-1DataendsCodesegmentAssumecs:code,ds:data

start:

mov

ds,axMov

cx,n

dec

cxMov

di,cx

Movbx,0Mov

ax,a[bx]Cmpax,a[bx+2]

jge

cotinue

movax,data

xchgax,a[bx+2]Mov

a[bx],ax

addbx,2Looploop1

mov

cx,diLooploop2codeends

endsrartloop1:cotinue:loop2:4、字符串处理程序使用ASCLL码时注意的几个问题P124页例如,搜索字符串的长度置串指针置串长度初值0取串元素=CR?N串长度加1Y存长度返回Namelength-of-stringDatasegmentStringdb‘abcdefg’,odh

Iidb?Crequ0dhDataendsStacksegmentparastack’stack’Db100dup(?)StackendsCodesegmentAssumecs:code,ss:stack,ds:data,es:data

StartprocfarBegin:pushds

Movax,0PushaxMovax,dataMov

ds,axMov

ds,axMov

es,axLeadi,stringMovdl,0Moval,cr

scasb

JedoneIncdlJmpagainAgain:done:leabx,iiMov[bx],dlRetStartendp

CodeendsEndbegin7宏汇编一、宏定义、宏调用和宏展开1、定义格式:宏名MACRO[哑元表]宏定义体ENDM宏指令名的第一个符号必须是字母给出宏定义中用到的形式参数各参数之间用逗号分开

2、宏调用格式:宏名[实元表]3、宏展开:汇编时将宏名用宏定义体代替,并用元代替对应的哑元

举例说明宏的定义、调用和展开例7.1P247页用宏指令定义两个字操作数相乘,得到一个16位的第三个操作数为结果。宏定义MULTIPLYMACROOPR1,OPR2,RESULTPUSHDXPUSHAXMOVAX,OPR1IMULOPR2MOVRESULT,AXPOPAXPOPDXENDM

宏调用MULTIPLYCX,VAR,XYZ[BX]MULTIPLY240,BX,SAVE宏展开PUSHDXPUSHAXMOVAX,CXIMULVARMOVXYZ[BX],AXPOPAXPOPDXPUSHDXPUSHAXMOVAX,240IMULBXMOVSAVE,AXPOPAXPOPDX宏调用与子程序调用的区别主程序X-a,y-bCallQ子程序(X,Y)Q:RETX-C,y-DCallQX-E,y-FCallQQMACROX,YENDM

QA,BQC,DQE,FQ(A,B)Q(C,D)Q(E,F)二、宏定义中的参数1、宏定义可以无参数SAVEREGMACROPUSHAXPUSHBXPUSHCXPUSHDXPUSHSIPUSHDIENDM定义:程序中调用SAVEREG例7.3P249页2、变元可以是操作码FOOMACRO定义:P1,P2,P3MOVAX,P1P2P3ENDMFOOWORD_VAR,INC,AX汇编时展开宏MOVAX,WORD_VARINCAX例7.4P249页3、变元是操作码的一部分,用&作为分隔符LEAPMACRO定义:COND,LABJ&

CONDLABENDMLEAPZ,THERE汇编时展开宏JZTHEREJNZTHERELEAPNZ,THERE例7.5P250页FOMACRO定义:P1JMPTA&P1ENDMFOWORD_VAR汇编时展开宏JMPTAWORD_VARFOMACROP1JMPTAP1ENDM例7.6P250页4、变元是ASCLL串MSGGENMACRO定义:LAB,NUM,XYZLAB&

NUMDB‘HELLOMR.&

XYZ’ENDMMSGGENMSG,1,TAYLOR汇编时展开宏MSG1DBHELLOMR.TAYLOR例7.6P250页4、变元是ASCLL串MSGGEN定义:例7.7P251页5、变元中实用%操作符(略)三、LOCAL伪操作例7.8P252页1、宏定义体内允许使用标号ABSOLMACROOPERENDMCMPOPER,0JGENEXTNEGOPERNEXT:宏调用ABSOLVARABSOLBX汇编时展开宏CMPVAR,0JGENEXTNEGVARNEXT:CMPBX,0JGENEXTNEGBXNEXT:标号多重定义不允许用LOCAL伪操作解决标号多重定义的问题格式:LOCALLISTOFLOCALLABELS注意事项见P252汇编时各局部标号用??0000~??FFFF依次代替例7.8的宏定义应改为:ABSOLMACROOPERENDMCMPOPER,0JGENEXTNEGOPERNEXT:LOCALNEXT宏调用ABSOLVARABSOLBX汇编时展开宏CMPVAR,0JGENEGVAR??0000:CMPBX,0JGENEGBX??0001:??0000??0001四、在宏定义内使用宏(略)例7.9P253页五、列表伪操作(略)六、宏库的建立与调用宏库中包含多个宏定义,库名的扩展名通常为.MAC或.INC来表示,调用是需要在程序开始用INCLUDE语句来说明。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论