實驗四 [bx]和loop的使用

練習1:編程

  綜合使用 loop,[bx],編寫完整彙編程序,實現向內存 b800:07b8 開始的連續 16 個 字單元重複填充字數據0403H。ide

 1 assume cs:code  2 code segment  3         mov ax,0b800H  4         mov ds,ax  5         mov bx,07b8H  6         mov cx,16
 7         
 8 a:      mov [bx],0441H  9         inc bx 10         inc bx 11  loop a 12 
13         mov ax,4c00H 14         int 21H 15 code ends 16 end
View Code

  注意黃色區域,0b800H,中第一個0不能少。按規定以字母開始的十六進制數,應在其前面加上數字0以便彙編程序區分常數和符號。因此第一個零不能少,它只起區分做用。oop

  cx=10H也能夠寫成十進制的cx=16.spa

 將源代碼程序中字數據0403H→修改成0441H,再次運行,截圖顯示運行結果。debug

練習2:3d

   綜合使用 loop,[bx],編寫完整彙編源程序,實現向內存 0:200~0:23F 依次傳送數據 0~63(3FH)。 code

  (1)必作:綜合使用loop, [bx], mov實現 blog

 1 assume cs:code  2 code segment  3         mov ax,0H  4         mov ds,ax  5         mov bx,0200H  6         mov cx,40H  7 
 8 z:      mov [bx],al  9         inc al 10         inc bx 11  loop z 12 
13         mov ax,4c00H 14         int 21H 15 code ends 16 end
View Code

  debug 4_2.exe內存

  

  

用g命令執行到event

  (2)選作*:利用棧的特性,綜合使用 loop,push 實現(限定僅使用 8086 中已學過 指令實現) 

 1 assume cs:code  2 code segment  3         mov ax,0
 4         mov ss,ax  5         mov ax,3F3EH  6         mov sp,240H  7         mov cx,20H  8 a:      push ax  9         add ax,-0202H 10  loop a 11         mov ax,4C00H 12         int 21H 13 code ends 14 end
View Code

此處的add ax,-2020H 也能夠改爲sub ax,0202H,效果是同樣的。

練習3. 教材實驗4(3)(P121)

 1 assume cs:code  2 code segment  3      mov ax,cs  4      mov ds,ax  5      mov ax,0020h  6      mov es,ax  7      mov bx,0
 8      mov cx,17h  9 s:   mov al,[bx] 10      mov es:[bx],al 11      inc bx 12  loop s 13      mov ax,4c00h 14      int 21h 15 code ends 16 end
View Code

  

  

  

和下面的圖對比一下,是一摸同樣的,說明該程序段起到了它該有的做用。

  

實驗總結與體會:

  第一個實驗:在8086PC芯片中,0~9FFFF是主要存儲地址空間(RAM),A0000~BFFFF是顯存地址空間,C0000~FFFFF是各種ROM地址空間。且在十六進制數前,若是是字母開頭,必定要加區分符0區分。

  第二個實驗:在8086進棧中,是從高地址單元到低地址單元,並且只能以字單元進行壓棧,彈棧。

  第三個實驗:代碼段和數據並無差異,只是在於你怎麼讀取,理解。CS:IP指向的數據,就是代碼,DS:[bx]指向的就是數據。

相關文章
相關標籤/搜索