实验3 多个段的汇编源程序编写和调试
实验任务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, 0dfh mov 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 segment start: 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,2 mov 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.
实验总结
通过本次实验,巩固了多个段的程序的编写运行,掌握了其各个段地址之间的联系,学会了编写一些简单的汇编程序。