Click here to load reader

第 3 章 汇编语言程序设计

  • Upload
    helene

  • View
    150

  • Download
    3

Embed Size (px)

DESCRIPTION

第 3 章 汇编语言程序设计. 3.1 概述 指令: 计算机完成某种操作的命令 程序: 完成某种功能的指令序列 软件: 各种程序总称 机器代码,汇编语言程序,汇编程序 汇编语言程序建立步骤: (1)用编辑程序建立 .ASM 源文件 (2)用 LINK 程序把 .ASM 文件转换为 OBJ 文件 (3)用 LINK 程序把 .OBJ 文件转换为 .EXE 文件,或用 EXE 2 BIN 程序把 .EXE 文件转换为 .COM 文件 (4)在 DOS 下直接键入 .EXE 文件或 .COM 文件的文件名就可运行该程序. 3.2 语句格式. - PowerPoint PPT Presentation

Citation preview

PowerPoint 1


END [label]
.STARUP DSSSSPEND
.EXIT 0



PUBLIC:.public
STACK:SARCKLINKSSSPSARCKSSSP
COMMON:COMMONCOMMON
PRIVATE:

.USE32: 32≤4GB1632


ASSUME NOTHING
DS
DATA1 SEGMENT ‘DATA’
$JNE $6 JNE6
$$$

1



DATA1
200H
12H
201H
08H
202H
34H
203H
()
DATA2
204H
9AH
205H
78H
206H
()
207H
()
DATA3
208H
78H
209H
56H
20AH
34H
20BH
12H
DATA4
20CH
0CH
20DH
02H
20EH
99H
20FH
66H

4



DATA1
300H
12H
301H
34H
302H
56H
303H
12H
304H
34H
305H
56H

5



DATA1
100H
12H
101H
34H
102H
56H
103H
9AH
104H
9AH
105H
9AH
106H
78H
107H
56H
108H
9AH
109H
9AH
10AH
9AH
10BH
78H




BYTEWORDDWORDFWORDQWORDTWORD
FARNEAR

EXTRNPUBLIC


MOV BX,178D
2

EQU

1
2
4ANDORNOTXOR


4
6EQNELTGTLEGT
0FFFFH0


5SEGOFFSETTYPELENGTHSIZE
SEG
DB1DW2DD4DF6DQ8DT100NEAR1FAR—2

<2>DUPTYPE1DUPDUPDUPDUP1
SIZE

DATA ENDS
CODE SEGMENT
MOV DS, AX
MOV BX, OFFSET AA1 ; BX=3000H
MOV CL, TYPE AA1 ; CL=2
MOV CH, TYPE CC1 ; CH=1
MOV AL, TYPE GG1 ; AL=4

MOV AX, SIZE AA1 ; AX=200×
MOV DX, LENGTH BB1

PTR
BYTEWORDDWORDFWORDQWORDTWORDNEARFAR







3

4

SEGOFFSETTYPELENGTHSIZE
5


3.  
  

1. 
2. “Y”“N”
3. 

data ends
db 100 dup(?)
start proc far

mul si ;B×D
mov [bx+0ah], dx
mul si ;A×D
add ax,[bx+0ah]
mul di ;B×C
adc dx,[bx+0ch]
mul di ;A×C
adc dx,0

32
data segment
sign db ?
db 100 dup(?)
mov dx, [bx+2] ;A->DX
mov si, [bx+4] ;D->SI
mov si, [bx+6] ;C->DI
cmp dx, 0 ;

jns gomul ; GOMUL
adc word ptr [bx+0eh],0 ;
done: ret
start endp
-1 x<0
xy
x“”“”xy=0;y= -1;y= 1

AL 00000001 R1
AL 00000010 R2
AL 00000100 R3
AL 00001000 R4
AL 00010000 R5
AL 00100000 R6
AL 01000000 R7
AL 10000000 R8
DB 100 DUP(?)
TOP EQU $-STACK
STARK ENDP
CODE ENDS
END BEGIN
COUNT EQU $-BUFFER
TOP EQU $-STACK
,N=90000,
90000/300=300
db 100 dup(?)
cwd
ret


2.X>0, 1/2<=a<1 -128<=b<=+127
3.X<0, -1<=a<-1/2 -128<=b<=+127
X

32
db 100 dup(?)
start proc far
begin push ds
mov ax, 0
cmp dx, 0
and dx, dx
jns again
ret

457BUFFERBLOCK
FUN1,FUN2

buffer dw 05, 05,05, 05, 05,05, 05, 05,05, 05, 05,05
block dw 12 dup (?)
db 100 dup (?)
start proc far
begin push ds
12571034689111201CC0011010110110000


name loop_use_logic_rula
data segment
buffer dw 11, 22, 33, 44, 55, 66, 77, 88, 99, 1234, 5678, 9876
block dw 12 dup (?)
db 100 dup (?)
start proc far
begin: push ds
mov ax, 0

2.I/O
3.I/OASCII7ASCII37H07H99ASCII39H
4.ASCIIASCII
5.ASCII
6. 
08H 7BH DEL
7.ASCII7

db 100 dup (?)
again scasb ;
data segment
db 100 dup (?)
start proc far
begin push ds
again scasb ;

db 100 dup (?)
start proc far
begin: push ds
mov ax, 0

db 100 dup (?)
start proc far
begin: push ds
lea di,sting2
push cx

4: ASCIISTRING“1”“0”“1”

db 100 dup(?)
1CPU
data ends
db 100 dup (?)
add_0 add al,’0’


db 100 dup(?)



db 100 dup(?)
5: 16ASCII
db 100 dup(?)
start proc far
begin: push ds
js next1
db 100 dup(?)
jnc next NEXT
next: inc di


db 100 dup(?)
start proc far
begin: push ds
inc buffer


;

6
name find_nin_max_val
data segment
buffer db 10,22,12,80,6709127100040
minval db
maxval db ?
data ends
db 100 dup(?)
start proc far
begin: push ds
cmp al,minval
je next NEXT
2. ——Bubble Sort
N102212806709127100040
NeNN-1eN-1eN>eN-1eN-1eN-2e2e1…….
NN-1
00100

db 100 dup(?)

emp ax,buffer[si-2] ;eNeN-1
jge next ; eN>= eN-1,NEXT
next: dec si
dec si ;
ret

db 100 dup(?)



db 100 dup(?)
done: ret
start endp
code ends
end begin
eN/2N/2XX>eN/2eN/2N/2Ne3N/4XX< eN/20N/2eN/4X0
001115213457607890127N100N19X78

18
L0R10NJN/2J+R/2010/2=5,eN/2eJ57X78X>eJL=J=5R=10J510/27.5J7eJ78X
1
1 2
K 1 2 K 1 2 3 4
L 0 5 L 0 0 2 2
R 10 10 R 10 5 5 3
J 5 7 J 5 2 3 2
ej 57 78 ej 57 15 21 15
X>ej X=ej X< ej X> ej X< ej X≠ej

db 100 dup(?)
cmp ax,[bx] ;eJ
je found ;FOUND
popf
ret
db 100 dup(?)
cmp ax,[bx] ;XeJ
Pushf
Poopf
popf

1 2 3
6020
6000
6004



6020
6060
6060
60A0

60A0
0000

60A0
0000

6060
60A0
6020

6004
6000
6020
6060


db 100 dup(?)
db 100 dup(?)
mov [di],al
mov [di],al
mov [di],al
: 0123454


db 100 dup(?)
ret


db 100 dup(?)
Parameter Passing


MOV CX,[BX]

name use_suber_examl
data segment
db 100 dup(?)
Addz: add a1,’0’

db 100dup(?)
stack ends
code segment
assume cs:code,ss:stack
num2 dd 1h,12345h ;Y1,Y2
push bx
pop bx
mov cx,4
adc ax,cs:[bx+8] ;
mov cs:[bx+10h],ax ;
inc bx
inc bx
loop again
pop cx
pop ax
data segment
db 100dup(?)
stack ends
code segment
assume cs:code,ss:stack,ds:data,es:data
num2 dw offset va12,seg va12
result dw offset buffer,seg buffer
ret
;CS:[BX]32SIDS
;

xchg dx,bx
mov cx,4
add bx,0ch ;
pop di
pop si
pop bx
pop cx
pop ax
CS:[BX]3216
CALL
n!=

… AX-1→AX(3-1=2) AX-1→AX(2-1=1) AX-1→AX(1-1=0)
AX=NUM=3 ≠0 ≠0
CALL FACTOR CALL FACTOR CALL FACTOR
X1 X2 X3 POP AX(1→AX)
POP CX (3 →CX) POP CX(2 →CX) RET
MUL CX MUL CX
RET RET
AH,INT 21H
DOSI/O
0909BL0DAAAND 0FH
DOS2CRTASCIIDL
MOV DL ,OUTPUT_CHAR
db 100 dup(?)
mov ah,2
2

db 100dup(?)
stack ends
data segment
‘’‘’‘’111160016001240

Y
N
Y
Y
N
0
=24
DAA
1
0
=60
0
1
DAA
=60
DAA

db 100 dup(?)
BCDCX100002710H010064H100AH;
ASCII‘$’.9



BCD
ASCIIBCD
db ? ;
db 100dup(?)
stack ends
code segment
assume cs:code,ds:data,es:data,ss;stack
pop bx
dec b1
400H
MOV AH,0
INT 21H
JUMP0
³ËÊýÈ¡²¹
0
³Ë»ý±ê־ȡ·´
³ËÊý
³ËÊýÈ¡²¹
Ð޸ĵØÖ·Ö¸Õë
Ñ­»·´ÎÊý¼õ
0
£¬ÉèµÚ
Ñ­»·´ÎÊý¼õ
Âß¼­³ß×óÒÆһλ
È¡Âß¼­³ß
»·´ÎÊý£¬ÉèµØÖ·Ö¸Õë
Íê³É·ñ£¿
´æÒÆλ´ÎÊý
0
Éè´®
2
±£´æ¸ß
ת»»×Ó³ÌÐò
ÉèÑ­»·´ÎÊý
´æÖÁ´æ´¢Æ÷
·µ»Ø
Íê³É·ñ£¿
ÉèÑ­»·´ÎÊý¼ÆÊýÆ÷£¬
ÖÃÊýÂë¼ÆÊýÆ÷Ϊ
A
·µ»Ø
ÒÔҪɾ³ýµÄÔªËصĵØַΪĿµÄµØÖ·£¬ËüµÄÏÂÒ»¸öÔªËصÄ
µØַΪԴµØÖ·£¬ÒÔʣϵÄÔªËØÊýΪ´«ËÍÊý½øÐÐÊý¾Ý´«ËÍ
·µ»Ø
´®È«ËÑË÷
Íê·ñ£¿
1





0
N
1
ÓëÁеĵÚÒ»¸öÔªËرȽÏ
KEY<X1?
KEY>N?
ÏàµÈ£¿
1
BX
Ö¸ÏòÔªËØ
ÔªËØ
3
µÄ
×îºóÔªËØ
6020
6000
6004

6060
6020

60A0
6060

0000
60A0

6060
6020
6000
6004

6020
60A0
6060

0000
60A0

È뻺³åÇø
½Ç
°Ñ·ûºÅ×÷Ϊ×î¸ßÓÐЧλ
·µ»Ø
¡Á
4
Ö¸ÁתÖÁÏàÓ¦µÄ
×Ó³ÌÐòµÄÈë¿Ú
·µ»Ø
LL FACTOR
¡ú
AX)
RET RET
ʹ
BL=0
ÑÓʱ
°Ñ
BL
Çø
°Ñ
BL
Çø
¶þ½øÖÆÊýÈ¡²¹
ÖÆ
°ÑÊäÈëÊýµÄ
ASCII
¡®£º¡¯£¬ÒªÇóÊäÈëÊ®½øÖÆÊý
0
1
Y
N
Y
N

ÀûÓù¦Äܵ÷ÓÃ
°ÑÊäÈë
µÄ
ASCII
ÃëÔöÁ¿
DAA
ÀûÓù¦Äܵ÷ÓÃ
ÖÁ
CH
BL
ÔöÁ¿
DAA