組合語言實驗13

2021-10-05 11:31:27 字數 3141 閱讀 9455

(1)

assume cs:code

data segment

db 'welcome to masm! ',0

data ends

code segment

start:

;設定ds:[si]指向源位址,即cs:[do0]

mov ax,cs

mov ds,ax

mov si,offset do7c

;設定es:[di]目的位址

mov ax,0

mov es,ax

mov di,200h

;設定cx為傳輸長度

mov cx,offset do7c_end-offset do7c

cld ;設定傳輸方向為正

rep movsb

;設定7c中斷向量表指向0:200h

mov word ptr es:[7ch*4],200h

mov word ptr es:[7ch*4+2],0

;測試資料,dh=行號,dl=列號,cl=顏色

mov dh,10

mov dl,10

mov cl,2

mov ax,data

mov ds,ax

mov si,0

;中斷例程

int 7ch

;結束程式

mov ax,4c00h

int 21h

do7c:

push ax

push si

push es

push di

push dx

push cx

;es:di指向輸出快取區,di=ah*16+dl*2

mov ax,0b800h

mov es,ax

mov al,0a0h

mul dh

mov di,ax

mov al,2

mul dl

add di,ax

;放置資料

show:

mov al,ds:[si]

cmp al,0

je ok

mov es:[di],al

inc si

inc di

mov es:[di],cl

inc di

jmp short show

ok:

pop cx

pop dx

pop di

pop es

pop si

pop ax

iret

do7c_end: nop ;**段結尾,便於計算7ch例程的長度

code ends

end start

(2)

assume cs:code

code segment

start: ;7ch中斷例程的安裝程式

mov ax, cs

mov ds, ax

mov si, offset lp ;將ds:si指向源位址(captial的機器碼)

mov ax, 0000h

mov es, ax

mov di, 200h ;將es:di指向目的位址(0:200h向量表中)

mov cx, offset lpend - offset lp ;設定傳輸長度

cld ;傳輸方向為正

rep movsb ;位元組傳輸

;設定中斷向量表,使7ch條目中斷向量指向0000:200h

mov ax, 0000h

mov es, ax

mov word ptr es:[7ch*4], 200h

mov word ptr es:[7ch*4+2], 0000h

mov ax, 4c00h

int 21h

lp: push bp ;將bp這個ss棧的偏址儲存

mov bp, sp ;將當前棧頂指標值送入到bp

dec cx ;呼叫一次7ch,(cx)-1

jcxz lpret ;與(cx)值判斷,如果為0,跳轉到lpret標號

add [bp+2], bx ;修改ss棧中的從棧頂向下第2個單元的值

lpret: pop bp ;恢復bp值

iret ;返回到呼叫處。

lpend: nop ;**段結尾,便於計算7ch例程的長度。

code ends

end start

(3)

;程式設計,分別在螢幕的2,4,6,8行顯示4句英文詩

assume cs:code

code segment

s1: db 'good ,better,best,','$'

s2: db 'never let it rest,','$'

s3: db 'till good is better,','$'

s4: db 'and better ,best.','$'

s : dw offset s1,offset s2,offset s3,offset s4

row:db 2,4,6,8

start:mov ax,cs

mov ds,ax

mov bx,offset s

mov si,offset row

mov cx,4

ok: mov bh,0

mov dh,[si] ;dh放置行號

mov dl,10 ;dl放置列號

mov ah,2 ;呼叫10h號中斷例程的二號子例程

int 10h

mov dx, [bx] ;dx中存放偏移位址

mov ah,9 ;呼叫21h號中斷例程的9號子例程

int 21h

inc si ;準備下一次迴圈

add bx,2

loop ok

mov ax,4c00h

int 21h

code ends

end start

組合語言實驗1 3

輸入10個字元,並反序輸出 data segment dd1 db 10 dup data ends code segment assume cs code,ds data start mov ax,data mov ds,ax lea bx,dd1 dd1的有效位址放入bx中 mov cx,0ah...

《組合語言》實驗 實驗

注意 db定義位元組型別變數,乙個位元組資料百佔1個位元組單度元,讀完乙個,偏移量加1 dw定義字型別變問量,乙個字資料佔2個位元組單元,讀完乙個,權偏移量加2 dd定義雙字型別變數版,乙個雙字資料佔4個位元組單元,讀完乙個,權偏移量加4 一開始用了乙個暫存器表示所有項,但是後來發現四個資料佔的位元...

組合語言實驗1 2

小寫字母變為大寫字母 data segment notic db please input the word 0ah,0dh data ends code segment assume cs code,ds data start mov ax,data mov ds,ax 填入ds mov cx,1...