Upload
sancho
View
217
Download
0
Embed Size (px)
DESCRIPTION
第四章 汇编语言程序格式. §4. 1 汇编语言的上机过程 §4. 2 汇编语言语句种类及格式 §4. 3 伪操作. 编辑. 汇编. 连接. 调试. 文本编辑器,如 EDIT.COM. 汇编程序,如 MASM.EXE. 连接程序,如 LINK.EXE. 调试程序,如 DEBUG.EXE. 错误. 错误. 错误. 应用程序. 汇编语言程序的开发过程. 源程序:文件名. asm. 目标模块:文件名. obj. 可执行文件:文件名. exe. 错误. §4. 2 汇编语言语句种类及格式. 指令语句 伪指令 宏指令. - PowerPoint PPT Presentation
Citation preview
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 []
.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 !