4-第4章-汇编语言程序格式_第1页
4-第4章-汇编语言程序格式_第2页
4-第4章-汇编语言程序格式_第3页
4-第4章-汇编语言程序格式_第4页
4-第4章-汇编语言程序格式_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

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

文档简介

1、第四章汇编语言程序格式主要内容:汇编程序功能伪操作汇编语言程序格式汇编语言程序的上机过程汇编语言1.汇编程序功能编辑程序汇编程序program.asmprogram.obj连接程序program.exe汇编程序的主要功能: 检查源程序,给出出错信息 产生目标文件(.obj)和列表文件(.lst) 展开宏指令汇编语言2.伪操作(伪指令)是汇编程序对源程序进行汇编时处理的操作,完成 处理器选择、存储模式定义、数据定义、存储器分配、指示程序开始结束等功能。 处理器选择伪操作 段定义伪操作 程序开始和结束伪操作 数据定义及存储器分配伪操作 表达式赋值伪操作 地址计数器与对准伪操作 基数控制伪操作汇编语

2、言处理器选择伪操作:选择 8086 指令系统默认选择 80286 指令系统选择保护模式下的 80286 指令系统选择 80386 指令系统选择保护模式下的 80386 指令系统选择 80486 指令系统选择保护模式下的 80486 指令系统选择 Pentium 指令系统选择保护模式下的 Pentium 指令系统.8086.286.286P.386.386P.486.486P.586.586P汇编语言段定义伪操作:完整的段定义伪操作DS ESSS CS文件头装入模块EXE 程序的内存映象图汇编语言PSPdatasegment; 定义数据段dataendsextrasegment; 定义附加段ex

3、traendscodesegment; 定义代码段assume cs:code, ds:data, es:extrastart:movax, datamovds, ax; 段地址段寄存器codeendsendstart汇编源程序的其它形式:汇编语言codesegment mainprocfarassume start:movax,4c00h int21hmainendp codeendsendstartcodesegment mainprocfarassume start:pushdsmovax, 0pushaxret mainendp codeendsendstart带堆栈段的汇编源程序:d

4、atasegment ends segment dwtos ends segment proc assumedatastack100labeldup (?)wordstack code mainfarcs:code, ds:data,ss:stackstart:mov mov mov push sub push mov mov ret endp ends endax,ss,sp, ds ax, ax ax,ds,stack ax offsettosDSESSSaxdata axCSmain code汇编语言startPSP堆栈段的情况:stacksegment dwtosends100labe

5、ldup (?)wordstackmov mov movax,ss,sp,stack ax offsettos100字push sub pushds ax, axaxtos 00C8H sp汇编语言datasegmentendsdatastack100labelstacksegment dwtosendsdup (?)wordstackcodestart:segmentpush sub push mov movretds ax, ax ax,ds,axDSESdata axSSCScodeends endstart汇编语言PSPint main()int ar0=0,1,2;int ar1=1

6、,2,3;int ar2=2,3,4;int *p=ar0,ar1,ar2;ar20012FF5C0012FF600012FF64ar10012FF680012FF50p0012FF6C0012FF540012FF700012FF58ar00012FF740012FF78汇编语言0012FF7C0120012FF740012FF680012FF5C123234完整段定义的格式:段名SEGMENT段名ENDS 定位类型 组合类型 使用类型 类别; 语句序列(1)定位类型 align_typePARABYTEWORDDWORDPAGE(2)组合类型 combine_typePRIVATEPUBLI

7、CCOMMONSTACKATexp(3)使用类型 use_typeUSE16USE32(4)类别class汇编语言例:; proadd1.asmextrndataproadd segment ary count sumends: farcommondw dwdw1,2,3,4,5,6,7,8,9,1010?datacode1mainsegment proc assume push sub push movmov call ret endp endsendfarcs:code1, dsds:datastart:ax, ax ax,ds,faraxdata axptr proaddmaincode

8、1汇编语言start; proadd2.asmpublicdataproadd segment ary count sumendscommondw dwdw1,2,3,4,5,6,7,8,9,1010?datacode2proaddsegment proc assume mov mov endp endsendfar cs:code2,ds:data ax, datads, axproaddcode2汇编语言存储模式与简化段定义伪操作(1)MODEL 伪操作. MODEL 存储模式 ,语言类型 ,操作系统类型 ,堆栈选项 存储模式:tinysmallmediumcompactlargehuge

9、flat(2)简化的段定义伪操作.code name.data.data?.fardata name.fardata? name.const.stack size汇编语言.modelsmall.stack100H.data.code.startup.exit 0 end汇编语言.model small.data.code.startup.exit 0 end.model small.data.codestart: movax, datamovds, axmovax, 4c00h int21h.model smallendstart.const.data.codestart: movax, DG

10、ROUPmovds, axmovax, 4c00h int21hendstart汇编语言.model small.data.code.startup.exit 0 end段组定义伪操作汇编语言dseg1segmentwordpublicdatadseg1endsdseg2segmentwordpublicdatadseg2endsdatagroupgroupdseg1, dseg2csegsegmentparapubliccodeassumecs:cseg, ds:datagroupstart:movax, datagroup movds, axmovax, 4c00h int21hcsege

11、ndsendstartstart:mov movmov movmov mov movworddwdata1segment const1 endsax, datagroup ds, axax, const1 var1, ax100data1worddwdata2segment var1 ends?bx, offset var1 bx, offset data1 bx, offset data2; (bx) = 2; (bx) = 2; (bx) = 4data2datagroupgroupdata1, data2assumeds:data2movax, data2codesegmentassum

12、ecs:code, ds:datagroupmov mov movmovds, ax ax, var1bx, offset var1ax, 4c00h; (bx) = 2int21h汇编语言codeendsend startstart:movmovmov movmov mov movdata1segment const1 endsax, datagroupds, axax, const1 var1, axbx, offset var1 bx, offset data1 bx, offset data2dw100data1data2segment var1 endsdw?; (bx) = 0;

13、(bx) = 2; (bx) = 2data2datagroupgroupdata1, data2assumeds:data2 movax, data2 movds, axmovax, var1movbx, offset var1movax, 4c00hcodesegmentassumecs:code, ds:datagroup; (bx) = 0int21h codeendsend start汇编语言程序开始和结束伪操作:TITLE NAMEENDtext module_name label . STARTUP. EXIT return_value 汇编语言数据定义及存储器分配伪操作:操作数

14、 , 操作数 , ; 注释 变量助记符助记符:DBDWDDDFDQDTDATA_BYTE DATA_WORD DATA_BYTEDATA_WORDDBDW10,4, 10H,?100, 100H, -5,?汇编语言0AH04H10H-64H00H00H01HFBHFFH-ARRAY ARRAYDB DBDWHELLO ABABPAR1PAR2 ADDR_TABLEDWDW DW100,200300,400PAR1,PAR2VARDBDB100 DUP (?)2 DUP (0,2 DUP(1,2),3)汇编语言48H45H4CH4CH4FH41H42H42H41HOPER1OPER2DB DWM

15、OV MOV?,?,?;字节指令;字指令OPER1,OPER2,00OPER1OPER2DB DWMOV MOV1, 21234H, 5678HOPER1OPER2AX,AL,OPER1+1OPER2类型不匹配WORD PTRBYTE PTRMOVMOVAX,AL,OPER1+1OPER2(AX)=3402H(AL)=34H汇编语言01H02H34H12H78H56HLABEL 伪操作:nameLABEL typeBYTE_ARRAY WORD_ARRAYBYTE_ARRAY WORD_ARRAYtosLABEL DW 50LABELBYTE DUP (?)WORD50字tos0064H汇编语

16、言表达式赋值伪操作:EQU表达式名表达式B ALPHABETAEQU EQUEQUBP+8 9ALPHA+18“ = ” 伪操作 (允许重复定义)EMPEMP= 7= EMP+ 1汇编语言地址计数器与对准伪操作:地址计数器 $ :保存当前正在汇编的指令的地址; 跳过 8 个字节的存储区; 转向地址是 JNE 的首址 + 6ORGJNE$+8$+60074ARRAY 0078$ 用在伪操作的参数字段:表示地址计数器的当前值ARRAYDW1,2,$+4,3,4,$+4007E汇编语言01H00H02H00H7CH00H03H00H04H00H82H00HORG 伪操作:SEG1SEGMENTORG

17、 VAR1 ORG VAR2 ORG VAR3ENDS10DW 20 DW$+8DW1234H5678H1357HSEG1汇编语言ORG100HSTART:BUFFERDB8 DUP (?)BUFFERLABELBYTEORG$+8;使下一地址从偶地址开始EVENADBEVEN DWmorningB2DUP(?)ALIGNboundaryALIGNALIGN42; EVEN汇编语言基数控制伪操作:; 规定无标记数的基数. RADIX表达式汇编语言.RADIX16 MOVBX, 0FFMOVBX, 178DMOVBX, 0FFH MOVBX, 1783.汇编语言程序格式源程序的每条语句可表示为:

18、 名 字 操 作操作数; 注释标号变量指 令 伪指令宏指令寄存器标号变量说明程序或语句的功能常数表达式标号/变量:段值、偏移量、类型三种属性表达式:数字表达式地址表达式汇编语言表达式操作符:(1) 算术操作符: + 、 - 、 *、 、 modMOVDX, BLOCK+(6-1)*2ARRAYARYENDDW DWMOV1,2,3,4,5,6,7?CX,(ARYEND-ARRAY)/2; 符号地址常数有意义;*时意义不明确;ADDAX, BLOCK+2MOVAX, BX+1汇编语言(2) 逻辑和移位操作符: AND、OR、XOR、NOT、SHL、SHROPR1OPR2EQUEQU AND257

19、AX, OPR1 ANDOPR2; AND AX, 1MOVAX,0FFFFHSHL2;MOVAX,0FFFCHINOUTAL,PORT_VALPORT_VAL AND 0FEH,AL汇编语言(3) 关系操作符: EQ、NE、LT、LE、GT、GE计算结果为逻辑值:真假0FFFFH0000HMOVFID,(OFFSETY-OFFSETX)LE128若 128 (真)若 128 (假)汇编结果:MOV汇编结果:MOVFID, -1FID, 0汇编语言X:Y:(4) 数值回送操作符: OFFSET、SEG、TYPE、LENGTH、SIZEOFFSET / SEG变量 / 标号功能:回送变量或标号的

20、偏址 / 段址变量 / 标号 / 常数TYPE常数0DB DW DD DF DQ DTNEAR FAR1246810-1-2变量LENGTH功能:回送由 DUP 定义的变量的单元数,其它情况回送1变量SIZE功能:LENGTH * TYPE汇编语言ARRAYTABLEDWDB100DUP(?)ABCDADD ADD MOV MOV MOVMOVSI SI CX CX CXCX,TYPE TYPE LENGTH LENGTH SIZESIZEARRAY TABLE ARRAY TABLE ARRAYTABLE;ADDSI,2;ADDSI,1;MOVCX,100;MOVCX,1;MOVCX,200

21、;MOVCX,1汇编语言(5) 属性操作符: PTR、段操作符、SHORT、THIS、HIGH、LOW、HIGHWORD、LOWWORD类型PTR 表达式MOV MOVJMPWORD PTR BX, 5 ES:BX, ALSHORT NEXT段操作符SHORT 标号THIS类型TANEXTEQUEQUTHISTHISBYTEFARCONS MOVMOVEQU AH,AL,1234H HIGHLOWCONSCONS汇编语言4.汇编语言程序的上机过程用 MASM 6.11 和 CodeView 汇编和调试汇编语言程序在 MASM6.11 中,Microsoft 公司提供了程序员工作平台PWB(pr

22、ogrammers work bench),这是一个集成化开发环境, 程序员可以方便地完成汇编语言源程序的编辑、汇编、连接调试和执行等工作。MASM6 提供的调试工具是 CodeView,CodeView 是一个源码级调试工具,能支持 16 位和 32 位指令的调试。其用户界面是多窗口全屏幕的,用户可方便地使用菜单和鼠标来调试程序。汇编语言上机步骤:1设置环境变量在MASM611BINR 的目录下,执行new-vars.bat 即可建立环境参数和搜索路径,然后执行pwb.exe 即可进入PWB 的主窗口。用其文件File 菜单中的Exit 命令可退出PWB。汇编语言23用 File 菜单下的有

23、关命令建立 asm 文件用 Project 和Options 菜单下的某些命令建立汇编语言程序运行环境建立工程文件,设置所建立的可执行文件类型的Build Options,设置编译器选项的Language Options,设置连接器选项的Link Options,设置调试器选项的CodeView Options 等。由于用户使用时大部分选项都可采用PWB 提供的默认值,因而不必作任何修改。但对于汇编语言程序,还有必要对MASM的选项作出某些选择。4用 Project 菜单下的有关命令对源文件进行汇编和连接Compile FileBuild Build All编译(汇编)当前的源文件,生成目标文

24、件连接目标文件,生成可执行文件汇编当前源文件,连接工程中的所有目标文件,生成可执行文件56用 Run 菜单下的有关命令执行程序用 CodeView 调试程序汇编语言汇编语言datasegment string1 string2 mass1 mass2endsmatch.asmdb db dbdbthamks youthanks youmatch., 13, 10, $no match!, 13, 10,$datacodemainsegment procassumefarcs:code,ds:data,es:datastart:push subpushds ax,axaxmov movmovax

25、,ds,es,data axaxlea lea cldmovsi,di,string1string2汇编语言cx,10repzcmpsbatchleadx, mass2 jmpshortdispmatch: leadx, mass1 disp:movah, 09int21hretmainendpcodeendsendstart汇编语言汇编语言汇编语言汇编语言match.lst(1)match.lst(2)汇编语言汇编语言match.lst(3)match1.asmdatasegment string1 mass1 mass2endsdb dbdbthamks youmatch., 13, 10

26、, $no match!,13,10,$dataextrasegment string2endsdbthanks youextracodemainsegmentproc assumefarcs:code, ds:data,es:extrastart:mov movax,ds,dataaxmov movends endax,es,extraaxcode汇编语言start汇编语言match2.asm.modelsmall.datastring1 string2 mass1mass2db db dbdbthamks youthanks you match., 13, 10, $nomatch!,13,10,$.code mainstart:procfarmov mov movendp endax,ds,es,dataax axmainstart汇编语言汇编语言例:.model.code org jmptiny100hmainbegin:;*num1 num2sumdw dwdw1199H1166H

温馨提示

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

评论

0/150

提交评论