《機器語言》由會員分享,可在線閱讀,更多相關《機器語言(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、1.1 機器語言 1.2 匯編語言 1.3 存儲器1.4 指令 數(shù)據(jù)1.5 存儲單元 1.6 CPU對存儲器的讀寫AB DB CB1.7 內(nèi)存2.1 通用寄存器:14個寄存器 它們的名稱為: AX、BX、CX、DX、SI、DI、SP、BP、 IP、CS、SS、DS、ES、PSW2.2 物理地址,段地址:偏移地址2.3 CS : IP 2.4 MOV ADD JMP3.1 內(nèi)存中字的存儲,字節(jié)存儲3.2 DS : .2.5 MOV ADD JMP SUB 2.6 DEBUG4.1 編程編譯連接跟蹤運行5 bx loop 段前綴 安全的段空間循環(huán)指令的跟蹤 MOV ADD JMP SUB BX L
2、OOP6 包含多個段的程序 cs:code ds:data ss:sseg es:esegassume cs:codea segmentdb 1,2,3,4,5,6,7,8a endsb segmentdb 1,2,3,4,5,6,7,8b endsc segmentdb 0,0,0,0,0,0,0,0c endscode 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 mov d
3、s,ax mov bx,0 mov cx,8 s2:mov ax,es:bx add bx,ax add bx,2 loop s2 mov ax,4c00h int 21hcode ends end startassume cs:codea segment dw 1,2,3,4,5,6,7,8a endsb segment dw 0,0,0,0,0,0,0,0b endscode segmentstart: mov ax,b mov ss,ax mov sp,10h mov ax,a mov ds,ax mov bx,0 mov cx,8s: push bx add bx,2 loop s m
4、ov ax,4c00h int 21hcode endsend start7 MOV ADD JMP SUB BX LOOP AND OR Asc2碼 字符形式給出的數(shù)據(jù) 大小寫轉(zhuǎn)換 SI, DI, BX以及組合assume cs:codesg,ss:stacksg,ds:datasgstacksg segment dw 0,0,0,0,0,0,0,0stacksg endsdatasg segment db 1. display db 2. brows db 3. replace db 4. modify datasg endscodesg segmentstart: mov ax,stac
5、ksg 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 and al,11011111b mov bx+si,al inc si loop s0 add bx,16 pop cx loop smov ax,4c00hint 21hcodesg endsend start8 數(shù)據(jù)處理問題,地址 長度 尋址方式綜合運用MOV ADD JMP SUB BX LOOP AND OR DIV DD DW DB DUP W
6、ORD PTR BYTE PTR DIVassume cs:code ds:segseg segmentdb 96 dup(?)db DEC,Ken Oslendw 137,40db PHPseg endscode segmentstart: 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 mov byte ptr bx+10h+si,Xmov
7、 ax,4c00hint 21hcode endsend start向表格中填數(shù)據(jù),向內(nèi)存中寫數(shù)據(jù)assume cs:codesg,ds:data,es:tabledata 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 ;以上是表示21年的21個字符串 dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514 dd 34598
8、0,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,45257,17800 ;以上是表示21年公司雇員人數(shù)的21個word型數(shù)據(jù)data endstable segment db 21 dup(year summ ne ? )table endscodesg segmentstart: mov ax,d
9、ata mov ds,ax mov ax,table mov es,ax mov bx,0 mov si,0 mov di,0 mov cx,2 s: ;進入循環(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 ;以上8句的作用是存放年份 mov ax,54hbx ;第一個年收入的段基址為54H mov dx,56hbx mov es:5hdi,ax mov es:7hdi,dx ;以上4句的作用是存放公司總收入 mov ax,0A8h
10、si ;第一個人數(shù)的段基址為0A8H mov es:0Ahdi,ax ;以上2句是存放公司的人數(shù) mov ax,54hbx div word ptr ds:0A8hsi mov es:0dhdi,ax ;以上3句是存放人均收入 add bx,4 add si,2 add di,16 ;以上3句是為下一次循環(huán)時存放數(shù)據(jù)做準備 ;3個寄存器遞增的速度決定了所要存取的數(shù)據(jù)的位置的偏移地址 loop s ;跳到標號s處mov ax,4c00hint 21hcodesg endsend start9 MOV ADD JMP SUB BX LOOP AND OR DIV DD DW DB DUP WORD
11、 PTR BYTE PTR DIV offset JMP short ptr/nearptr 標號等 JCXZ LOOP奇怪的返回程序assume cs:code code segmentmov ax,4c00hint 21hstart:mov ax,0 s:nopnopmov di,offset smov si,offset s2mov ax,cs:simov cs:di,axs0:jmp short ss1:mov ax,0int 21hmov ax,0s2:jmp short s1nopcode endsend start 向顯示緩沖區(qū)寫數(shù)據(jù)assume cs:code,ds:data,
12、ss:stackdata segment db welcome to masm! db 02h,24h,71h data endsstack segment dw 8 dup(0)stack endscode segmentstart: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,0b872 mov cx,3 ;外循環(huán)為3次,因為要顯示三個字符串s3: push cx ;三個進棧操作為外循環(huán)s3保存相關寄存器的值 push ax
13、;以防止它們的值在內(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: mov al,ds:bx+si mov es:bx+di,al inc si add di,2 loop s1 ;此循環(huán)實現(xiàn)偶地址中存放字符 mov si,1 ;si的值設為1,從而為在顯存奇地址中存放字符的顏色屬性做準備 pop di ;將di的值恢復成進入內(nèi)循環(huán)之前的時候的值 mov al,ds:10hbx+di ;取顏色屬性源OP尋址方式:相對基址變址 mo
14、v cx,10h ;第二個內(nèi)循環(huán)也為10h次s2: mov es:bx+si,al add si,2 loop s2 ;此循環(huán)實現(xiàn)奇地址中存放字符的顏色屬性 ;以下4句為下一趟外循環(huán)做準備 inc di pop ax add ax,0ah ;將顯存的段起始地址設為當前行的下一行 ;在段地址中加0ah,相當于在偏移地址中加了0a0h(=160d) pop cx loop s3 mov ax,4c00h int 21hcode endsend start10 MOV ADD JMP SUB BX LOOP AND OR DIV DD DW DB DUP WORD PTR BYTE PTR DIV
15、offset JMP short ptr/nearptr 標號等 JCXZ LOOP RET RETF CALL MUL 參數(shù)和結果的傳遞:assume cs:codedata segment db conversationdata endscode segmentstart: mov ax,data mov ds,ax mov si,0 mov cx,12 call captal mov ax,4c00h int 21hcaptal: mov al,si and al,11011111b mov si,alinc si loop captal retcode endsend start編寫子程序。