實驗3 多個段的彙編源程式編寫和除錯
阿新 • • 發佈:2020-11-25
實驗任務1
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 mov si, 0 mov di, 0f00h s: mov al, [si] and al, 0dfhmov es:[di], al mov al, [5+si] mov es:[di+1], al inc si add di, 2 loop s mov ah, 4ch int 21h code ends end start
2.執行結果截圖:
3.debug裡除錯程式
4.line4位元組段用途:修改字母的顏色。
實驗任務2
1.編寫原始碼
assume cs:code,ds:data data segment db 23,50,66,71,35 data ends code segmentstart: mov ax,data mov ds,ax mov di,0 mov cx,5 s1: 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,2mov dl," " int 21h inc di loop s1 mov ax,4c00h int 21h code ends end start
2.執行結果截圖
實驗任務3
1.原始碼
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
2.
問題1:資料如圖
問題2:cs=076c,ss=076b,ds=076a
問題3:data段地址:X-2,stack段地址:X-1
實驗任務4
1.原始碼
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
2.
問題1:0123h 0456h
問題2:cs=076ch,ss=076bh,ds=076ah.
問題3:data段段地址X-2,stack段地址X-1.
問題4:佔16個位元組
3.
實驗任務5
1.原始碼:
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
2.
問題1:data段:0123h 0456h
問題2:cs=076a,ss=076e,ds=076d。
問題3:data段段地址X+3,stack段地址X+4
3.
實驗任務6
第(3)題的程式task5.exe仍然可以正確執行,因為如果不指明入口位置,則程式從所分配的空間開始執行,前2題開頭是資料段,會被當成指令讀入,只有從第(3)題一開始是指令程式碼。
實驗任務7
1.原始碼
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 ax,b mov es,ax mov ax,c mov ss,ax mov bx,0 mov cx,8 s: mov ax,[bx] mov ss:[bx],ax mov ax,es:[bx] add ss:[bx],ax inc bx loop s mov ax,4c00h int 21h code ends end start
2.
實驗任務8
1.原始碼
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,a mov ds,ax mov ax,b mov bx,0 mov ss,ax mov sp,16 mov cx,8 s: push [bx] add bx,2 loop s mov ax,4c00h int 21h code ends end start
2.
實驗總結
通過本次實驗,鞏固了多個段的程式的編寫執行,掌握了其各個段地址之間的聯絡,學會了編寫一些簡單的彙編程式。