《機(jī)器語言》由會員分享,可在線閱讀,更多相關(guān)《機(jī)器語言(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1.1 機(jī)器語言
1.2 匯編語言
1.3 存儲器
1.4 指令 數(shù)據(jù)
1.5 存儲單元
1.6 CPU對存儲器的讀寫——AB DB CB
1.7 內(nèi)存
2.1 通用寄存器:14個寄存器 它們的名稱為:
AX、BX、CX、DX、SI、DI、SP、BP、
IP、CS、SS、DS、ES、PSW
2.2 物理地址,段地址:偏移地址
2.3 CS : IP
2.4 MOV ADD JMP
3.1 內(nèi)存中字的存儲,字節(jié)存儲
3.2
2、 DS : […..]
2.5 MOV ADD JMP SUB
2.6 DEBUG
4.1 編程——編譯——連接——跟蹤——運(yùn)行
5 [bx] loop 段前綴 安全的段空間
循環(huán)指令的跟蹤
MOV ADD JMP SUB [BX] LOOP
6 包含多個段的程序 cs:code ds:data ss:sseg es:eseg
assume cs:code
a segment
db 1,2,3,4,5,6,7,8
a ends
b segment
db 1,2,3,4,5
3、,6,7,8
b ends
c segment
db 0,0,0,0,0,0,0,0
c ends
code segment
start:mov ax,a
mov es,ax
mov ax,c
mov ds,ax
mov bx,0
mov cx,8
s1:mov ax,es:[bx]
add [bx],ax
add bx,2
loop s1
mov ax,b
mov es,ax
4、 mov ds,ax
mov bx,0
mov cx,8
s2:mov ax,es:[bx]
add [bx],ax
add bx,2
loop s2
mov ax,4c00h
int 21h
code ends
end start
assume cs:code
a segment
dw 1,2,3,4,5,6,7,8
a ends
b segment
dw 0,0,0,0,0,0,0
5、,0
b ends
code segment
start:
mov ax,b
mov ss,ax
mov sp,10h
mov ax,a
mov ds,ax
mov bx,0
mov cx,8
s: push [bx]
add bx,2
loop s
mov ax,4c00h
int 21h
code ends
end start
7 MOV
6、ADD JMP SUB [BX] LOOP AND OR
Asc2碼 字符形式給出的數(shù)據(jù) 大小寫轉(zhuǎn)換
SI, DI, [BX]以及組合
assume cs:codesg,ss:stacksg,ds:datasg
stacksg segment
dw 0,0,0,0,0,0,0,0
stacksg ends
datasg segment
db 1. display
db 2. brows
db 3. replace
db 4. modify
7、
datasg ends
codesg segment
start:
mov ax,stacksg
mov ss,ax
mov sp,16
mov ax,datasg
mov ds,ax
mov bx,0
mov cx,4
s: ;外循環(huán)
push cx
mov si,3
mov cx,4
s0: ;內(nèi)循環(huán)
mov al,[bx+si]
a
8、nd al,11011111b
mov [bx+si],al
inc si
loop s0
add bx,16
pop cx
loop s
mov ax,4c00h
int 21h
codesg ends
end start
8 數(shù)據(jù)處理問題,地址 長度 尋址方式綜合運(yùn)用
MOV ADD JMP SUB [BX] LOOP AND OR DIV DD DW DB DUP WORD PTR BYTE PTR DIV
assume
9、 cs:code ds:seg
seg segment
db 96 dup(?)
db DEC,Ken Oslen
dw 137,40
db PHP
seg ends
code segment
start:
mov ax,seg
mov ds,ax
mov bx,60h
mov word ptr [bx+0ch],38
add word ptr [bx+0eh],70
mov si,0
mov byte ptr [bx+10h+si],V
inc si
mov byte ptr [bx+10h+si],A
inc si
m
10、ov byte ptr [bx+10h+si],X
mov ax,4c00h
int 21h
code ends
end start
向表格中填數(shù)據(jù),向內(nèi)存中寫數(shù)據(jù)
assume cs:codesg,ds:data,es:table
data segment
db 1975,1976,1977,1978,1979,1980,1981,1982,1983
db 1984,1985,1986,1987,1988,1989,1990,1991,1992
db 1993,1994,1995
;以上是表
11、示21年的21個字符串
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
;以上是表示21年公司總收的21個dword型數(shù)據(jù)
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430
12、,45257,17800
;以上是表示21年公司雇員人數(shù)的21個word型數(shù)據(jù)
data ends
table segment
db 21 dup(year summ ne ?? )
table ends
codesg segment
start:
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov bx,0
mov si,0
mov di,0
13、 mov cx,2
s: ;進(jìn)入循環(huán)
mov al,[bx]
mov es:[di],al
mov al,[bx+1]
mov es:[di+1],al
mov al,[bx+2]
mov es:[di+2],al
mov al,[bx+3]
mov es:[di+3],al
;以
14、上8句的作用是存放年份
mov ax,54h[bx] ;第一個年收入的段基址為54H
mov dx,56h[bx]
mov es:5h[di],ax
mov es:7h[di],dx
;以上4句的作用是存放公司總收入
mov ax,0A8h[si] ;第一個人數(shù)的段基址為0A8H
mov es:0Ah[di],ax
15、 ;以上2句是存放公司的人數(shù)
mov ax,54h[bx]
div word ptr ds:0A8h[si]
mov es:0dh[di],ax
;以上3句是存放人均收入
add bx,4
add si,2
add di,16
;以上3句是為下一次循環(huán)時存放數(shù)據(jù)做準(zhǔn)備
16、 ;3個寄存器遞增的速度決定了所要存取的數(shù)據(jù)的位置的偏移地址
loop s ;跳到標(biāo)號s處
mov ax,4c00h
int 21h
codesg ends
end start
9 MOV ADD JMP SUB [BX] LOOP AND OR DIV DD DW DB DUP WORD PTR BYTE PTR DIV offset JMP short ptr/nearptr 標(biāo)號等
JCXZ LOOP
奇怪的返回程序
assume cs:code
code segment
17、
mov ax,4c00h
int 21h
start:mov ax,0
s:nop
nop
mov di,offset s
mov si,offset s2
mov ax,cs:[si]
mov cs:[di],ax
s0:jmp short s
s1:mov ax,0
int 21h
mov ax,0
s2:jmp short s1
nop
code ends
end start
向顯示緩沖區(qū)寫數(shù)據(jù)
assume cs:code,ds:data,ss:stack
data se
18、gment
db welcome to masm!
db 02h,24h,71h
data ends
stack segment
dw 8 dup(0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,10h
mov bx,0
mov di,0
;算出屏幕第12行中間的顯存的段起始位置放入ax中
mov ax,
19、0b872
mov cx,3 ;外循環(huán)為3次,因為要顯示三個字符串
s3: push cx ;三個進(jìn)棧操作為外循環(huán)s3保存相關(guān)寄存器的值
push ax ;以防止它們的值在內(nèi)循環(huán)中被破壞
push di
mov es,ax ;此時es為屏幕第12行中間的顯存的段起始位置
mov si,0
mov di,0
mov cx,10h ;內(nèi)循環(huán)為10h次,因為一個字符串中含10h個字節(jié)
s1: m
20、ov al,ds:[bx+si]
mov es:[bx+di],al
inc si
add di,2
loop s1 ;此循環(huán)實現(xiàn)偶地址中存放字符
mov si,1 ;si的值設(shè)為1,從而為在顯存奇地址中存放字符的顏色屬性做準(zhǔn)備
pop di ;將di的值恢復(fù)成進(jìn)入內(nèi)循環(huán)之前的時候的值
mov al,ds:10h[bx+di] ;取顏色屬性[源OP尋址方式:相對基址變址]
mov cx,10h
21、 ;第二個內(nèi)循環(huán)也為10h次
s2: mov es:[bx+si],al
add si,2
loop s2 ;此循環(huán)實現(xiàn)奇地址中存放字符的顏色屬性
;以下4句為下一趟外循環(huán)做準(zhǔn)備
inc di
pop ax
add ax,0ah ;將顯存的段起始地址設(shè)為當(dāng)前行的下一行
;[在段地址中加0ah,相當(dāng)于在偏移地址中加了0a0h(=160d)]
pop cx
loo
22、p s3
mov ax,4c00h
int 21h
code ends
end start
10 MOV ADD JMP SUB [BX] LOOP AND OR DIV DD DW DB DUP WORD PTR BYTE PTR DIV offset JMP short ptr/nearptr 標(biāo)號等
JCXZ LOOP RET RETF CALL MUL
參數(shù)和結(jié)果的傳遞:
assume cs:code
data segment
23、db conversation
data ends
code segment
start:
mov ax,data
mov ds,ax
mov si,0
mov cx,12
call captal
mov ax,4c00h
int 21h
captal:
mov al,[si]
and al,11011111b
mov [si],al
inc si
loop captal
ret
code ends
end start
編寫子程序。