实验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.

 

 实验总结

通过本次实验,巩固了多个段的程序的编写运行,掌握了其各个段地址之间的联系,学会了编写一些简单的汇编程序。

posted @ 2020-11-25 20:11  不见鹿  阅读(103)  评论(1编辑  收藏  举报