實驗3 多個段的彙編源程式編寫與除錯

2022-06-01 01:48:07 字數 4159 閱讀 8898

實驗任務1

assume cs:code, ds:data

data segment

db 'nuist'

db 5 dup(2)

data ends

code segment

start:

mov ax, data

mov ds, ax

mov ax, 0b800h

mov es, ax

mov cx, 5!設定迴圈次數為5

mov si, 0

mov di, 0f00h !設定起始記憶體單元位址

s: mov al, [si] !將資料段記憶體單元[si]賦給al

and al, 0dfh !將字母轉為大寫字母

mov es:[di], al !將結果儲存給附加段的記憶體單元中

mov al, [5+si] !將指標移動至儲存資料的記憶體單元中

mov es:[di+1], al !將資料緊跟大寫字母儲存

inc si !si自增1

add di, 2 !di因為每次儲存兩位元組資料(字母和數字2)所以自增2

loop s !繼續下次迴圈

mov ah, 4ch

int 21h

code ends

end start

db 2,3,4,5,6
結果如下:

猜測此處資料的作用是改變大寫字母的顏色。

實驗任務2

assume cs:code, ds:data

data segment

db 23, 50, 66, 71, 35

data ends

code segment

start:

mov ax, data

mov ds, ax

mov di, 0

mov cx, 5

s: mov ah, 0

mov al, ds:[di]

mov bl, 10

div bl

mov ds:[10+di], al

mov ds:[11+di], ah

mov ah, 2

mov dl, ds:[10+di]

add dl, 30h

int 21h

mov ah, 2

mov dl, ds:[11+di]

add dl, 30h

int 21h

mov ah, 2

mov dl, " "

int 21h

inc di

loop s

mov ax, 4c00h

int 21h

code ends

end start

實驗任務3

assume cs:code, ds:data, ss:stack

data segment

dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h

data ends

stack segment

dw 0, 0, 0, 0, 0, 0, 0, 0

stack ends

code segment

start: mov ax,stack

mov ss, ax

mov sp,16

mov ax, data

mov ds, ax

push ds:[0]

push ds:[2]

pop ds:[2]

pop ds:[0]

mov ax,4c00h

int 21h

code ends

end start

實驗任務4

assume cs:code, ds:data, ss:stack

data segment

dw 0123h, 0456h

data ends

stack segment

dw 0, 0

stack ends

code segment

start: mov ax,stack

mov ss, ax

mov sp,16

mov ax, data

mov ds, ax

push ds:[0]

push ds:[2]

pop ds:[2]

pop ds:[0]

mov ax,4c00h

int 21h

code ends

end start

name segment

...name ends

如果段中的資料佔n個位元組,那麼程式載入後,該段實際占有空間為:((n+15)/16)*16

實驗任務5

assume cs:code, ds:data, ss:stack

code segment

start: mov ax,stack

mov ss, ax

mov sp,16

mov ax, data

mov ds, ax

push ds:[0]

push ds:[2]

pop ds:[2]

pop ds:[0]

mov ax,4c00h

int 21h

code ends

data segment

dw 0123h, 0456h

data ends

stack segment

dw 0,0

stack ends

end start

實驗任務6

實驗任務7

assume cs:code

a segment

db 1,2,3,4,5,6,7,8

a ends

b segment

db 1,2,3,4,5,6,7,8

b ends

c segment ; 在整合軟體環境中,請將此處的段名稱由c→改為c1或其它名稱

db 8 dup(0)

c ends

code segment

start:

mov ax,a

mov ds,ax

mov cx,8

mov ax,b

mov es,ax

mov di,0

s: mov al,ds:[di]

add es:[di],al

inc di

loop s

mov ax,c

mov ds,ax

mov cx,8

mov di,0

s1: mov al,es:[di]

add [di],al

inc di

loop s1

mov ax,4c00h

int 21h

code ends

end start

實驗任務8

assume cs:code

a segment

dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

a ends

b segment

dw 8 dup(0)

b ends

code segment

start:

mov ax,b

mov ss,ax

mov ax,a

mov ds,ax

mov sp,0010h

mov di,0

mov cx,8

s: push [di]

add di,2

loop s

mov ax,4c00h

int 21h

code ends

end start

實驗3 多個段的彙編源程式編寫與除錯

一 實驗目的 1.理解和掌握將資料 棧放入不同邏輯段的程式的編寫和除錯 2.理解具有多個段的彙編源程式對應的目標程式執行時,記憶體分配方式 3.掌握大小寫字元的轉換方法 數字字元和數值之間的轉換方法 4.理解並掌握各種定址方式的靈活應用 5.掌握彙編指令loop,and,or,div,mul的用法 ...

實驗2 多個邏輯段的彙編源程式編寫與除錯

在debug中將執行到line17結束 line19之前,記錄此時 暫存器 ds 076a,暫存器 ss 076b,暫存器 cs 0031 假設程式載入後,code段的段位址是x,則,data段的段位址是x 20h,stack的段位址是x 10h。在debug中將執行到line17結束 line19...

實驗5 編寫 除錯具有多個段的程式

assume cs code,ds data,ss stack data segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data ends stack segment dw 0,0,0,0,0,0,0,0 stack ends ...