1. 程式人生 > >《組合語言》實驗四課程

《組合語言》實驗四課程

(1) 綜合使用 loop,[bx],編寫完整彙編程式,實現向記憶體 b800:07b8 開始的連續 16 個 字單元重複填充字資料 0403H。

 

程式碼:

assume cs:code
code segment
mov ax,0b800h
mov ds,ax
mov bx,07b8h
mov cx,16
s: mov [bx],0403h
add bx,2
loop s

mov ax,4c00h
int 21h
code ends
end

 截圖:

 

 

 

 將原始碼程式中字資料 0403H→修改為 0441H,再次執行,截圖顯示執行結果:

 

 

 

(2)程式設計:向記憶體0:200~0:23F依次傳送資料0~63(3FH),程式中只能使用9條指令,9條指令中包括“mov  ax,4c00h”和“int 21h”

程式碼:

 

assume cs:code

code segment

   mov ax,0020h

   mov ds,ax

   mov bx,0

   mov cx,64

s:mov [bx],bx                                                            ;此處直接將bx=0傳入0020:0,並通過迴圈使得bx傳入記憶體

   inc bx

   loop s

code ends

end

截圖:

 

 

實驗內容三:

下面的程式的功能是將”mov ax,4c00h"之前的指令複製到記憶體0:200處,補全程式,上機除錯,跟蹤執行結果 

assume cs:code
code segment
    mov ax,___cs____
    mov ds,ax
    mov ax,0020h
    mov es,ax
    mov bx,0
    mov cx,___17h____
  s:mov al,[bx]
    mov es:[bx],al
    inc bx
    loop s
    mov ax,4c00h
    int 21h
code ends
end

1.將程式碼段內的指令複製到目的地址當中去,cs是指向程式程式碼段的地址

2.cx的值是loop迴圈的次數,而程式段的長度決定了迴圈寫入的次數,所以cx的值為程式段的長度。

用r命令檢視一開始cx的值,再用u命令反彙編

 

可見當程式段結束時,即“mov ax,4c00h”時偏移地址為17,即程式段長度為17,所以cx=17

 將cx改為17後,t命令逐步除錯

 

複製成功