第四章 汇编语言程序格式

80
第第第 第第第第第第第第 §4.1 第第第第第第第第第 §4.2 第第第第第第第第第第第 §4.3 第第第

description

第四章 汇编语言程序格式. §4. 1 汇编语言的上机过程 §4. 2 汇编语言语句种类及格式 §4. 3 伪操作. 编辑. 汇编. 连接. 调试. 文本编辑器,如 EDIT.COM. 汇编程序,如 MASM.EXE. 连接程序,如 LINK.EXE. 调试程序,如 DEBUG.EXE. 错误. 错误. 错误. 应用程序. 汇编语言程序的开发过程. 源程序:文件名. asm. 目标模块:文件名. obj. 可执行文件:文件名. exe. 错误. §4. 2 汇编语言语句种类及格式. 指令语句 伪指令 宏指令. - PowerPoint PPT Presentation

Transcript of 第四章 汇编语言程序格式

  • 4.1 4.2 4.3

  • .asm.obj.exe

  • 4.2

  • CPU2[:] [DEST[ ,SRC]] [;]

  • ? - $@31? - $@? $.

  • CPU[] [] []

  • 4.2

  • [Variable] Mnemonic Operand,,Operand [;comments] Variable: Mnemonic: Comments: DB,DW,DD,DF,DQ,DT

  • DATA_BYTE DB 10,4,10H DATA_WORD DB 100,100H,-5 DATA_DW DD 3*20,0FFFDHDATA_BYTEDATA_WORDDATA_DW

  • MESSAGE DB HELLO MESSAGE1 DB AB MESSAGE2 DW AB MESSAGE3 DW A,B,C

    ABC DB 0,?,?,?,0 DEF DW ?,52,?MESSAGEMESSAGE1MESSAGE2MESSAGE3

  • repeat_count dup(operand,, operand) ARRAY1 DB 2 DUP(0,1,2,?) ARRAY2 DB 100 DUP(?) ARRAY3 DB 100 DUP(0,2 DUP(1,2),0,3)

  • PARA_TABLE DW PAR1 DW PAR2 DW PAR3 INT_TABLE DD DATA1 DD DATA2 OPER1 DB ?,? OPER2 DW ?,?

    MOV OPER1,0 MOV OPER2,0

  • OPER1 DB 1,2 OPER2 DW 1234H,5678H

    MOV AX,OPER1+1 MOV AL,OPER2 MOV AX,WORD PTR OPER1+1 MOV AL,BYTE PTR OPER2BYTE,WORD,DWORD,FWORD,QWORD

  • NAME LABEL TYPE BYTE_ARRAY LABEL BYTE WORD_ARRAY DW 50 DUP(?)

    MOV WORD_ARRAY+2,0 MOV BYTE_ARRAY+2,0 SUB1_FAR LABEL FAR SUB1:MOV AL,30H

  • EQU ;1) CNT EQU 5NUM EQU 13+5+42) ADR1 EQU DS:[BP+14]3) W0 EQU WORD PTR DA_BYTE EQU

  • = ;EQUCNT = 5NUM = 4NUM = NUM+10HCBD = DDACBD = ADD

  • SEGMENT [align_type] [combine_type] [use_type] [class];ENDSSEGMENTENDSSEGMENTENDS4stack

  • alignPAGE XXX00H,256Bytes/Page PARAXXXX0HDWORD4WORD BYTE PARA

  • combinePRIVATEPUBLICCOMMON

  • combineSTACKSS,SP

  • use_typeUSE16USE32

  • classMASM 'code''data''stack

  • DA1SEGMENT PARA DATADD1DB 10 DUP(12H)DA1ENDSSTA1SEGMENT STACK STACK0DW 20H DUP(?)STA1ENDSDA2SEGMENT PARA DATADD2DB 20H DUP(13H)DA2ENDSSTA2SEGMENT STACK STACK0DW 30H DUP(?)STA2ENDSCODE SEGMENTCODE ENDS

  • ; * * * * * * * * * * * * * * * * * * * * * * * data_seg1 segment ; . data_seg1 ends; * * * * * * * * * * * * * * * * * * * * * * * data_seg2 segment ; . data_seg2 ends; * * * * * * * * * * * * * * * * * * * * * * * code_seg segment ; assume cs:code_seg, ds:data_seg1, es:data_seg2

  • ASSUME ES:NOTHING;ESASSUME NOTHING ;

  • ASSUMEDSESASSUMEDS/ESMOVAX,MOV DS/ES,AX

  • SSSTACKSTACK1SEGMENT PARA STACKDW 20H DUP(0)STACK1ENDSCODESEGEMNTASSUME CS:CODE,SS:STACK1SSSTACK1SP=40H

  • SS(DS/ES)STACK1SEGMENTDW 40H DUP(0)TOPLABEL WORDSTACK1ENDSCODESEGEMNTASSUME CS:CODEMOV AX,STACK1MOV SS,AXMOV SP,OFFSET TOP;SP=80H

  • CSENDEND

  • CSCODESEGEMNTASSUME CS:CODE,SS:STACK1START:END START

  • + - * / MOD SHR SHL [ ]MOV AX,3*4+5; MOV AX,17MOD19 mod 7 = 5+- SHR/SHL CNT

  • NUM= 11011011BMOV AL,NUM SHL 3MOV AL,11011000BMOV BL, NUM SHR 2MOV AL,00110110BADD DL, NUM SHR 6ADD DL,00000011BMOV AL,ARRAY[BX][SI]MOV AL,ARRAY[BX+SI]

  • AND OR XOR NOTOR AL,03H AND 45H0R AL, 01HMOV AX, NOT 0F0HMOV AX,0FF0FHMOV BL, 55H AND 0F0H MOV BL,50H

  • EQ NE GT LT GE LE1 2MASM0FFH/0FFFFH -1MASM0000H

  • MOV BX,((PORT_VAL LT 5) AND 20) OR ((PORT_VAL GE 5) AND 30) PORT_VAL < 5 MOV BX, 20 MOV BX, 30

  • / /SEG /MOV AX, SEG K1OFFSET /MOV SI, OFFSET VAR

  • TYPE /

    BYTE1WORD2DWORD4NEAR-1FAR-2

  • V1 DB ABCDV2 DW 1234H,5678HV3DD V2MOV AL, TYPE V1;AL=1MOV CL, TYPE V2;CL=2MOV CH, TYPE V3;CH=4

  • LENGTH /DUPDUP1DUP

  • K1DB 10H DUP(0)K2DB 10H,20H,30HK3DW 20H DUP(0,1,2 DUP(2))K4DB ABCDMOV AL,LENGTH K1;AL=10HMOV BL,LENGTH K2;BL=1MOV CX,LENGTH K3;CX=20HMOV DX,LENGTH K4;DX=1

  • SIZE =LENGTH*TYPE

  • K1DB 10H DUP(0)K2DB 10H,20H,30HK3DW 20H DUP(0,1,2 DUP(2))K4DB ABCDMOV AL,LENGTH K1;AL=10HMOV BL,LENGTH K2;BL=1MOV CX,LENGTH K3;CX=20HMOV DX,LENGTH K4;DX=1MOV AL,SIZE K1;AL=10HMOV BL,SIZE K2;BL=1MOV CL,SIZE K3;CL=40HMOV DL,SIZE K4;DL=1

  • /PTR PTR

  • DA_BYTE DB 20H DUP(0)DA_WORD DW 30H DUP(0) LEA BX DA_WORD LEA SI,DA_BYTE MOV AX,WORD PTR BA_BYTE[10H] ADD BYTE PTR DA_WORD[20H],BL INC BYTE PTR [BX] SUB WORD PTR [SI],30H AND AX,WORD PTR[BX][SI] JMP FAR PTR SUB1

  • THISTHIS THISLABELEQU THISD_BYTEEQU THIS BYTEW_WORDDW 20H DUP(0);20HJMP_FAREQU THIS FARJMP_NEAR: MOV AL,30H

  • HIGH/LOW//8

    CONST EQU 0ABCDH MOV AH,HIGH CONST;AH=0ABH

  • 1() [] LENGTH SIZE 2PTR OFFSET SEG TPYE THIS :3HIGE LOW4* / MOD SHL SHR5+ -6EQ NE GT LT GE LE7NOT8AND9OR XOR10SHORT

  • $ $ORG EVEN

  • DATASEGMENT ORG 30HDB1DB 12H,34HORG $+20HSTRDB ABCCNTEQU $-STREVENDW1DW 20H DUP(0)DATAENDSCODE SEGMENTASSUME CS:CODE,DS:DATAORG 10HSTART:MOV AX,DATAMOV DS,AXCODE ENDSEND START

  • B,O,HRADIX 2816 MOV BX,0FFHMOV BX,178RADIX 16MOV BX,0FFMOV BX,178D

  • INT 21H

  • Code segment assume cs:code,ds:dataStart: mov ax,data mov ds,ax

    mov ah,4ch int 21hCode ends end start

  • cseg segment main proc far assume cs:cseg start: push ds ; xor ax,ax push ax . . ; . ret main endp cseg ends end start

  • . 80868086. 28680286. 286 P80286. 38680386. 386 P80386. 48680486. 486 P80486. 586Pentium. 486 PPentium

  • 1ZRESULT

  • DOSDX X+YDX DX*8DX DX-XDX DX/2RESULT DX

  • TITLEEXAMPLEDATASEGMENT XDW 6YDW 7RESULT DW ?DATAENDSSTA1SEGMENT PARA STACKDW 20H DUP(0)STA1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STA1

    START:MOV AX,DATA MOV DS,AXMOV DX,X;DX=XADD DX,Y;DX=X+YMOV CL,3SHL DX,CL SUB DX,X SAR DX,1 MOV RESULT,DXmov ah,4ch int 21hCODE ENDSEND START

  • 21ASCII

  • DATASEGMENT TABLE DB 30H,31H,32H,33H,34H,35H DB 36H,37H,38H,39H DB 41H,42H,43H,44H,45H,46H HEXDB 4 ASCIIDB ?DATAENDSSTA1SEGMENT PARA STACKDW 20H DUP(0)STA1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAASSUME SS:STA1

    START:MOV AX,DATA ;DSMOV DS,AXXOR BX,BXMOV BL,HEXMOV DL,TABLE[BX]MOV ASCII,DLMOV AH,2INT 21HMOV AH,4CHINT 21HCODE ENDSEND STARTMOV BX,OFFSET TABLEMOV AL,HEXXLAT TABLEMOV ASCII,AL

  • 1.2.TDTD3.193.3.213.303.37TD

  • MASM 5.0MASM 5.0

  • .MODEL .modelMASM7 TINY SMALL COMPACT MEDIUM LARGE HUGE FLAT

  • TINYMASM 6.0COM64KB16

  • SMALL64KB64KB128KB16NEAR

  • COMPACT64KB

  • MEDIUM64KB64KB

  • LARGE

  • HUGE64KB

  • FLAT3232x86 CPUDOSFLAT32Windows 9.xWindows-NTFLAT

  • .STACK [].DATA.CODE []

    [email protected]

  • .STACK [].STACKstack1KB= 1024 = 400h

  • .DATA.data_DATA.data?_BSS. constCONST

  • .CODE [].codeTINYSMALLCOMPACTFLAT_TEXTMEDIUMLARGEHUGE_TEXT

  • .STARTUPCPUDOSDSSSSPEND

  • .EXIT []0.exit 0mov ah,4chint 21hDOS4chDOSAH4chAL

  • MASM 6.x;SampleA.ASM.model small.stack.data...;.code.startup...;.exit 0...;end

  • ;lt301a.asm.model small;.stack;.data;stringdb Hello, Everybody !,0dh,0ah,$;.code;.startup;DSSSmov dx,offset string;mov ah,9int 21h;.exit 0;DOSend;Hello, Everybody !