微机原理汇编语言_第1页
微机原理汇编语言_第2页
微机原理汇编语言_第3页
微机原理汇编语言_第4页
微机原理汇编语言_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

1第4章汇编语言程序设计4.1汇编语言程序格式及开发过程4.2汇编语言的基本语法和伪指令4.3基本结构程序设计举例4.4子程序结构程序设计举例4.5BIOS和DOS中断24.1汇编语言程序格式及开发过程汇编语言——用指令的助记符、符号地址、标号等符号书写程序的语言。源程序——用汇编语言编写的程序。汇编——把源程序翻译成机器语言程序的过程。汇编程序——完成汇编任务的程序。3汇编语言语句

三种基本语句:指令语句(指令性语句):

在汇编时产生一个目标代码。伪指令语句(指示性语句):

无目标代码,为汇编程序服务。宏指令语句4编辑文本编辑器,如EDIT.COM连接连接程序,如LINK.EXE调试调试程序,如DEBUG.EXE应用程序错误错误源程序:文件名.asm目标模块:文件名.obj可执行文件:文件名.exe汇编汇编程序,如MASM.EXE错误错误错误1.汇编语言程序的开发过程52.汇编语言源程序格式.MODELSMALL.STACK256.DATAMDB30HNDB20HPDB40H.CODE.STARTUPMOVBL,MMOVAL,BLSUBAL,NADDAL,P.EXIT0ENDep11)简化格式(.EXE)

例:计算M-N+P6例:显示10行HELLODATASEGMENTMESGDB'HELLO!',0AH,0DH,'$'DATAENDSSTACKSEGMENTSTACKDB100DUP(?)STACKENDSCODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACKBEG:MOVAX,STACK MOVSS,AX MOVSP,1002)完整格式1(.EXE)7

MOVAX,DATA MOVDS,AX MOVCX,10LAST:MOVAH,9 MOVDX,OFFSETMESG INT21H LOOPLAST

MOVAH,4CH INT21HCODEENDS

ENDBEGep283)完整格式2(.EXE)例:计算100+99+98+…+2+1datasegmentsumdw?dataendscodesegmentmainprocfar

assumecs:code,ds:data

pushdssubax,axpushaxmovax,datamovds,axxorax,ax movcx,100again:addax,cxloopagainmovsum,ax

retmainendpcodeendsendmainep394)简化格式

(.COM).modeltiny;微型存储模式.code;只有代码段.startup;程序起始点=

ORG100Hmovdx,offsetstringmovah,9;显示信息int21hmovah,01h;等待按键int21hmovah,02h;响铃movdl,07hint21h.exit0;程序结束点,返回DOSStringdb‘Pressanykeytocontinue!$’end;汇编结束Ep4105)完整格式(.COM)C_SEGSEGMENT ASSUMECS:C_SEG,DS:C_SEG,ES:C_SEG ORG100HBEGIN: JMPSTARTMAN DB?WOMAN DB?NUM DW6START: MOVCX,NUM MOVDX,0INPUT: MOVAH,1 INT21H11

CMPAL,'1' JZMANCNT CMPAL,'0' JZWOMANCNT JMPINPUTMANCNT:INCDL JMPNEXTWOMANCNT:INCDHNEXT:LOOPINPUT MOVMAN,DLMOVWOMAN,DH MOVAH,4CH INT21HC_SEGENDS ENDBEGINep5124.2汇编语言的基本语法和伪指令1.汇编语言的基本语法1)标号与变量标号:是一条指令语句的符号地址。可作为转移类指令的操作数,即转移地址。变量:存放在某些存储单元中的值。13①段属性标号和变量对应存储单元的段地址②偏移属性标号和变量对应存储单元的偏移地址③类型属性标号的类型可以是NEAR和FAR,分别表示段内或段间变量的类型可以是BYTE、WORD和DWORD等地址属性标号和变量具有三种属性14变量、标号的命名一般最多由31个字母、数字及规定的特殊符号(.、_、$、?、@)组成,不能以数字开头.只能位于名字首$、?不能单独作为名字不区别标识符中的字母大小写不能使用汇编语言的保留字15保留字保留字(ReservedWord)是汇编程序已经利用的标识符,主要有:指令助记符——例如:MOV、ADD伪指令助记符——例如:DB、EQU运算符——例如:OFFSET、PTR寄存器名——例如:AX、CS预定义符号——例如:@data162)常数常数表示一个固定的数值数值常数字符串常数

用引号括起来的单个字符或多个字符,其数值是每个字符对应的ASCII码的值。符号常数

利用一个标识符表达的一个数值。例:DWriteCharequ2173)运算符算术运算符逻辑运算符关系运算符分析运算符综合运算符18+(加)-(减)*(乘)/(除)MOD(求模)①算术运算符②逻辑运算符AND(与)

OR(或)

XOR(异或)

NOT(非)19EQ(相等)NE(不等)LT(小于)GT(大于)LE(小于或等于)GE(大于或等于)③关系运算符④分析运算符OFFSETSEGTYPELENGTHSIZE20OFFSET格式:OFFSET变量或标号功能:取其后变量或标号的偏移地址。例如:MOVBX,OFFSETBUFSEG格式:SEG变量或标号功能:取其后变量或标号所在段的段首址。例如:

MOV AX,SEGABCMOVDS,AX21PTRTHIS⑤综合运算符例如:moval,byteptrw_var ;

jmpfarptrn_label ;类型名PTR名字/标号使名字或标号具有指定的类型类型名可以是:BYTE/WORD/DWORD

或者是:NEAR/FAR222.伪指令1)处理器选择伪指令2)等值伪指令3)定义存储单元伪指令4)段定义伪指令5)过程定义伪指令6)源程序结束伪指令231)处理器选择伪指令.8086.386.386P.586.586P242)等值伪指令EQU功能:给符号名定义一个值,或别的符号名。格式:符号名EQU表达式例:

PORT1EQU100PORT2EQUPORT1+10COUNTEQUCXADEQUADD特点:不能重复定义。不分配存储单元。253)定义存储单元伪指令DB,DW,DD,DQ,DT。格式:

[变量名]伪指令助记符表达式[,…]功能:定义内存数据存储区,类型由伪指令助记符确定,初值由表达式给定。26DB——定义字节伪指令DW——定义字伪指令DD——定义双字伪指令DQ——定义4字伪指令DT——定义10字节伪指令27数值表达式字符串表达式地址表达式(适用DW和DD伪指令)?表达式带DUP的表达式表达式的形式28data segment X db'a',-5 db2dup(100),?Y db'ABC'data endsmoval,XdecX+1movY,al29data segment count dw8000h,?,'AB'number dw64harray dw2dup(0)data ends304)段定义伪指令完整段定义伪指令段名 segment定位组合使用'类别' ... ;语句序列段名 endsSEGMENT定义一个逻辑段的开始ENDS表示一个段的结束4个关键字用于确定段的各种属性31段寄存器说明伪指令指定的段寄存器来寻址对应的逻辑段ASSUME段寄存器:段名[,段寄存器名:段名,...]注意:没有为段寄存器设定初值。32

存储模式和简化段定义伪指令存储模式伪指令.MODEL存储模式.model必须位于所有段定义语句之前存储模式决定一个程序的规模,确定进行子程序调用、指令转移和数据访问的缺省属性MASM的存储模式

①TINY②SMALL③COMPACT④MEDIUM

⑤LARGE⑥HUGE⑦FLAT33简化段定义伪指令.STACK[大小] ;堆栈段开始。参数指定字节数,默认是1KB.DATA ;数据段开始.CODE[段名] ;代码段开始一个逻辑段的开始,自动结束前面的一个段段名称使用MASM预定义符号例如:@data表示由.data定义的数据段的段名345)过程定义伪指令过程调用语句:CALL过程名过程返回语句:RETPROC_NAMEPROC[NEAR]/FAR...RETPROC_NAMEENDP356)源程序结束伪指令END[标号]指示汇编程序结束汇编过程源程序的最后必须为END标号用于指定程序开始执行点,连接程序将据此设置CS:IP值采用.startup不用“end标号”,而使用“end”。364.3基本结构程序设计举例.modelsmall.stack256.dataASCIIdb30h,31h,32h,33h,34h,35hdb36h,37h,38h,39hdb41h,42h,43h,44h,45h,46hHexdb0bh例1:实现一位16进制数转换为ASCII码显示。

(查表法)37.code.startupmovbx,offsetASCIImoval,hexandal,0fhxlatmovdl,almovah,2int21h.exit0end38例2:编写计算下面函数值的程序。

1 X>0Y=0 X=0-1 X39DATASEGMENTX DB-10Y DB?DATAENDSCODESEGMENT ASSUMEDS:DATA,CS:CODESTART:MOV AX,DATA MOV DS,AX40

CMP X,0 JGE A1 MOV Y,-1 JMP EXITA1:JG A2 MOV Y,0 JMP EXITA2:MOV Y,1 EXIT:MOV AH,4CHINT 21HCODEENDSEND START41

例3:编程统计BUF字单元中1的个数。42DATA SEGMENTBUF DW0011110010101011BCOUNT DB?DATA ENDSCODE SEGMENTASSUMEDS:DATA,CS:CODESTART: MOV AX,DATA MOV DS,AXMOV AX,BUFMOVCL,043LOPA: AND AX,AX JZ EXIT SHL AX,1 JNC LOPA INC CL JMP LOPAEXIT: MOV COUNT,CL MOV AH,4CH INT 21HCODE ENDS END START44

例4:编程实现将BUF字单元的二进制数以十六

进制形式显示在屏幕上。DATASEGMENTBUFDW2468HDATAENDSCODESEGMENTMAINPROCFAR ASSUMECS:CODE,DS:DATA PUSHDS SUBAX,AX PUSHAX45

MOVAX,DATA MOVDS,AX MOVBX,BUF MOVCH,4RT: MOVCL,4 ROLBX,CL MOVAL,BL ANDAL,0FH ADDAL,30H CMPAL,3AH JLPRT

ADDAL,07HPRT: MOVDL,AL MOVAH,2 INT21H DECCH JNZRT RETMAINENDPCODEENDS ENDMAIN46例5:在以BUF为首址的字存储区中存放有N个有符号数,现需将它们按大到小的顺序排列在BUF存储区中,试编写其程序。数 10 8 16 90 32第一遍 10 16 90 32 8第二遍 16 90 32 10 8第三遍 90 32 16 10 847DATASEGMENTBUFDW3,-4,6,7,9,2,0DW-8,-9,-10,20NEQU($-BUF)/2DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATA48START: MOV AX,DATA MOV DS,AX MOV CX,N DEC CXLOOP1: MOV DX,CX MOV BX,0LOOP2: MOV AX,BUF[BX] CMP AX,BUF[BX+2] JGE L XCHGAX,BUF[BX+2] MOV BUF[BX],AX49L: ADD BX,2 DEC CX JNE LOOP2 MOV CX,DX LOOP LOOP1 MOV AH,4CH INT 21HCODE ENDS END START504.4子程序结构程序设计举例例:十进制到十六进制转换的程序。程序要求从键盘取得一个十进制数,然后把该数以十六进制的形式在屏幕上显示出来。开始调用DECIBIN调用CRLF调用BINIHEX调用CRLF结束从键盘取得十进制数,保存到BX中显示回车和换行用十六进制形式显示BX中的数51DecihexsegmentMainprocfarassumecs:Decihexpushdsxorax,axpushax

calldecibincallcrlfcallbinihexcallcrlf

retMainendp

Decibinprocnearmovbx,0Newchar:movah,1int21hsubal,30hjlexitcmpal,9jgexitcbw

xchgax,bxmovcx,10mulcxxchgax,bxaddbx,ax

jmpnewcharExit:retDecibinendp

52Binihexprocnearmovch,4Rotate:movcl,4rolbx,clmovdl,blanddl,0fhadddl,30hcmpdl,3ahjlprintadddl,7hPrint:movah,2int21hdecchjnzrotateretBinihexendpCrlfprocnear

movah,2movdl,0dhint21hmovdl,0ahint21hretCrlfendpDecihexendsendMain534.5BIOS和DOS中断DOS有一百多个子程序,可供调用,包含:磁盘的读写、管理;内存管理;基本输入输出管理。用软中断指令调用。类型号:20~27H系统功能调用:INT21H1.DOS中断和DOS系统功能调用1)DOS中断542)DOS系统功能调用单字符输入(1)单字符显示(2)显示字符串(9)字符串输入(10)结束调用(4CH)

DOS系统功能调用的方法:①设置的入口参数。②功能号

AH。③INT21H指令自动转入中断子程序入口。④中断子程序运行完毕,获得出口参数。55字符串输入(功号为10)功能:从键盘接收字符串到内存缓冲区。要求:先定义一个缓冲区:第一字节:指出缓冲区能容纳字符个数。第二字节:保留以用作填写输入字符数。第三字节:开始存放接收字符。

DS:DX指向缓冲区。56例:反向显示输入的字符串。DATASEGMENTINFO1DB0DH,0AH,‘INPUTSTRING:$’INFO2DB0DH,0AH,‘OUTPUTSTRING:$’BUFADB80 DB?

DB 80DUP(0)BUFBDB81DUP(0)DATAENDS57COD

温馨提示

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

评论

0/150

提交评论