
第4章80x86汇编语言程序设计4.1MASM宏汇编语句结构以及开发过程4.2MASM汇编语言表达式、运算符4.3 程序段的定义和属性4.4复杂数据结构4.5宏汇编4.6基本汇编语言程序设计4.7子程序设计4.8高级汇编语言程序设计
1 第4章 80x86汇编语言程序设计 4.1 MASM宏汇编语句结构以及开发过程 4.2 MASM汇编语言表达式、运算符 4.3 程序段的定义和属性 4.4 复杂数据结构 4.5 宏汇编 4.6 基本汇编语言程序设计 4.7 子程序设计 4.8 高级汇编语言程序设计

第4章80x86汇编语言程序设计4.1MASM宏汇编语句结构以及开发过程4.1.1汇编语言程序的语句类型和格式1.语句的类型硬指令语句■伪指令语句宏指令语句2.语句的格式执行性语句一一由硬指令构成的语句,它通常对应一条机器指令,出现在程序的代码段中:标号:硬指令助记符操作数,操作数;注释说明性语句一一由伪指令构成的语句,它通常指示汇编程序如何汇编源程序:名字伪指令助记符参数,参数,………….;注释2
2 4.1 MASM宏汇编语句结构以及开发过程 4.1.1 汇编语言程序的语句类型和格式 1. 语句的类型 ◼ 硬指令语句 ◼ 伪指令语句 ◼ 宏指令语句 2. 语句的格式 ◼ 执行性语句——由硬指令构成的语句,它通常对应一条机器指令, 出现在程序的代码段中: 标号:硬指令助记符 操作数,操作数 ;注释 ◼ 说明性语句——由伪指令构成的语句,它通常指示汇编程序如何 汇编源程序: 名字 伪指令助记符 参数,参数,. ;注释 第4章 80x86汇编语言程序设计

第4章80x86汇编语言程序设计汇编语言的程序格式4.1.2例4.1简化段定义的源程序格式:.MODELSMALL.STACK.DATASTRINGDB'Hello,Everybody!', ODH, OAH,'s.CODE.STARTUPMOVDX.OFFSETSTRINGMOV AH, 9INT 21H.EXIT 0END3
3 4.1.2 汇编语言的程序格式 例 4.1 简化段定义的源程序格式: .MODEL SMALL .STACK .DATA STRING DB 'Hello, Everybody!', 0DH, 0AH, '$' .CODE .STARTUP MOV DX, OFFSET STRING MOV AH, 9 INT 21H .EXIT 0 END 第4章 80x86汇编语言程序设计

第4章80x86汇编语言程序设计例4.2完整段定义的源程序格式:STACKSEGMENT STACKDW 512 DUP(?)STACKENDSDATASEGMENTSTRINGDB'Hello,Everybody!,DH,OAH,'sDATAENDSCODESEGMENT'CODEASSUME CS: CODE,DS: DATA, SS: STACKSTART:MOV AX,DATAMOV DS,AXMOVDX,OFFSETSTRINGMOV AH, 9INT 21HMOV AH, 4CHINT 21HCODEENDS4ENDSTART
4 例 4.2 完整段定义的源程序格式: STACK SEGMENT STACK DW 512 DUP(?) STACK ENDS DATA SEGMENT STRING DB 'Hello, Everybody!', 0DH, 0AH, '$' DATA ENDS CODE SEGMENT 'CODE' ASSUME CS: CODE, DS: DATA, SS: STACK START:MOV AX, DATA MOV DS, AX MOV DX, OFFSET STRING MOV AH, 9 INT 21H MOV AH, 4CH INT 21H CODE ENDS END START 第4章 80x86汇编语言程序设计

第4章80x86汇编语言程序设计4.1.3汇编语言程序的开发过程一四个步骤:1.编辑编辑软件,建立*.asm2.汇编MASM.EXE,生成*.obj3.链接LINK.EXE,生成*.exe4.运行/调试-DEBUG.EXEML.EXE-ML汇编程序可以自动调用LINK程序(ML表示(MASM和LINK)CodeView调试器CV.EXEPWB(Programmer'sWorkBench)一MASM6.11提供的编程集成环境,在此环境下,程序员可直接编写源程序、汇编、链接和运行。5
5 4.1.3 汇编语言程序的开发过程 ◼ 四个步骤: 1. 编辑——编辑软件,建立*.asm 2. 汇编——MASM.EXE,生成*.obj 3. 链接——LINK.EXE,生成*.exe 4. 运行/调试——DEBUG.EXE ◼ ML.EXE——ML汇编程序可以自动调用LINK程序(ML表示 (MASM和LINK) ◼ CodeView调试器CV.EXE ◼ PWB(Programmer's WorkBench)——MASM 6.11提供的编程集成 环境,在此环境下,程序员可直接编写源程序、汇编、链接和运行。 第4章 80x86汇编语言程序设计

第4章80x86汇编语言程序设计ML[/options|filelist[/linklinkoptions]/AT Enable tiny model (.COM file)/nologo Suppress copyright message/BkUsealternatelinker/Sa Maximize source listing/cAssemble without linking/Sc Generate timings in listing/CpPreservecaseofuseridentifiers/Sf Generate first pass listing/CuMap allidentifiers to upper case/SkSetlinewidth/CxPreserve casein publics,externs/Sn Suppress symbol-table listing/coffgenerateCOFFformat objectfile/SpSetpagelength/D[=text]Definetextmacro/SsSetsubtitle/EPOutputpreprocessed listingto stdout/StSettitle/FSetstacksize(bytes)/SxListfalseconditionals/FeNameexecutable/TaAssemblenon-.ASMfile/Fl[filelGenerate listing/wSameas/wo/wxWX Treat warnings as errors/Fm|filelGeneratemap/FoNameobjectfile/WSetwarninglevel/FPiGenerate8Ox87emulatorencoding/XIgnoreINCLUDE environmentpath/Fr|filelGeneratelimitedbrowserinfo/ZdAddlinenumberdebuginfo/FR/filelGeneratefullbrowserinfo/ZfMakeallsymbolspublic/GUsePascal,C,orStdcallcalls/ZiAdd symbolicdebuginfo/HSetmax externalnamelength/ZmEnableMASM5.10 compatibility/Addincludepath/Zpn]Set structurealignment/link/Zs Perform syntax checkonly6
6 ML [ /options ] filelist [ /link linkoptions ] /AT Enable tiny model (.COM file) /nologo Suppress copyright message /Bl Use alternate linker /Sa Maximize source listing /c Assemble without linking /Sc Generate timings in listing /Cp Preserve case of user identifiers /Sf Generate first pass listing /Cu Map all identifiers to upper case /Sl Set line width /Cx Preserve case in publics, externs /Sn Suppress symbol-table listing /coff generate COFF format object file /Sp Set page length /D[=text] Define text macro /Ss Set subtitle /EP Output preprocessed listing to stdout /St Set title /F Set stack size (bytes) /Sx List false conditionals /Fe Name executable /Ta Assemble non-.ASM file /Fl[file] Generate listing /w Same as /W0 /WX /Fm[file] Generate map /WX Treat warnings as errors /Fo Name object file /W Set warning level /FPi Generate 80x87 emulator encoding /X Ignore INCLUDE environment path /Fr[file] Generate limited browser info /Zd Add line number debug info /FR[file] Generate full browser info /Zf Make all symbols public /G Use Pascal, C, or Stdcall calls /Zi Add symbolic debug info /H Set max external name length /Zm Enable MASM 5.10 compatibility /I Add include path /Zp[n] Set structure alignment /link /Zs Perform syntax check only 第4章 80x86汇编语言程序设计

第4章80x86汇编语言程序设计[address]assembleACrange addresscomparedumpD[range]Eaddress[iist]enterfi11Frange list[=address][addresses]GgohexH valuel value2inputportload[address][drive][firstsector][number]moveM range addressN[pathname][arglist]nameoutput0port byteP[number]proceed[=address]quitQR[register]registerrange listsearchS[value][=address]traceUunassemb1e[range][drive][firstsector][number]writew[address]allocate expanded memoryXA[#pages]XD[handle]deallocate expanded memoryXM[Lpage][Ppage][handle]map expanded memory pagesXSdisplay expanded memory status7
7 第4章 80x86汇编语言程序设计

第4章80x86汇编语言程序设计实验1汇编语言程序设计一、实验目的1.熟悉MASM6.11汇编语言程序开发环境。2.掌握汇编语言程序的调试方法和常用的调试工具。二、实验内容1. 安装MASM6.11。2. 设置MASM6.11PWB。3.设在内存中首地址为BLOCK的区域存有一批数据:61H,84H,93H,0C4H,17H,0FFH,52H,2AH。分别按下列要求编写汇编语言程序:(1)视该批数据为8位无符号数,采用冒泡法将其按升序排序;(2)视该批数据为8位有符号数,采用冒泡法将其按升序排序。三、实验要求1.根据实验内容编写程序。2.上机调试程序。3.记录并分析程序运行结果,8
8 实验1 汇编语言程序设计 一、实验目的 1. 熟悉MASM 6.11汇编语言程序开发环境。 2. 掌握汇编语言程序的调试方法和常用的调试工具。 二、实验内容 1. 安装MASM 6.11。 2. 设置MASM 6.11 PWB。 3. 设在内存中首地址为BLOCK的区域存有一批数据:61H,84H, 93H,0C4H,17H,0FFH,52H,2AH。分别按下列要求编写汇编 语言程序: (1) 视该批数据为8位无符号数,采用冒泡法将其按升序排序; (2) 视该批数据为8位有符号数,采用冒泡法将其按升序排序。 三、实验要求 1. 根据实验内容编写程序。 2. 上机调试程序。 3. 记录并分析程序运行结果。 第4章 80x86汇编语言程序设计

第4章80x86汇编语言程序设计实验1参考程序bubble.asm.model small1.输入源程序bubble.asm.data2.MLbubble.asmndw83.DEBUGbubble.exeblockdb61h.84h.93h.0c4h.17h.0ffh.52H.2ah.stack60hcmp al,block[bx+1].codejna continue.startupxchg al,block[bx+1]mov ax,@datamov block[bx],almov ds,axcontinue: add bx,1mov cx,nlooploop2dec cxmov cx,dxloopl: mov dx,cxlooplooplmov bx,0.exitloop2:mov al,block[bxend9
9 实验1 参考程序bubble.asm .model small .data n dw 8 block db 61h,84h,93h,0c4h,17h,0ffh,52H,2ah .stack 60h .code .startup mov ax,@data mov ds,ax mov cx,n dec cx loop1: mov dx,cx mov bx,0 loop2: mov al,block[bx] 第4章 80x86汇编语言程序设计 cmp al,block[bx+1] jna continue xchg al,block[bx+1] mov block[bx],al continue: add bx,1 loop loop2 mov cx,dx loop loop1 .exit end 1. 输入源程序bubble.asm 2. ML bubble.asm 3. DEBUG bubble.exe

第4章80x86汇编语言程序设计MASM汇编语言表达式、运算符4.24.2.1常量、运算符及表达式1.常数十进制常数一后缀D/d(可省略)十六进制常数一后缀H/h二进制常数一后缀B/b八进制常数——后缀Q/q改变默认进制.RADIXn字符串常数'Hello,Everybody!伪指令“EQU”和“=”符号常数符号名EQU数值表达式EQU符号名例:NEQU 10N=1010
10 4.2 MASM汇编语言表达式、运算符 4.2.1 常量、运算符及表达式 1. 常数 ◼ 十进制常数——后缀D/d (可省略) ◼ 十六进制常数——后缀H/h ◼ 二进制常数——后缀B/b ◼ 八进制常数——后缀Q/q ◼ 改变默认进制——.RADIX n ◼ 字符串常数——'Hello, Everybody!' ◼ 符号常数——伪指令“EQU”和“ = ” 符号名 EQU 数值表达式 符号名 EQU 例:N EQU 10 N=10 第4章 80x86汇编语言程序设计