實驗任務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 ...