实验2 多个逻辑段的汇编源程序编写与调试

实验任务1
任务1-1
task1_1.asm源码
task1_1调试到line17结束、line19之前截图
问题回答
① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = __0770__, 寄存器(SS)
= __0771__, 寄存器(CS) = __0772__
② 假设程序加载后,code段的段地址是X,则,data段的段地址是__X-2__, stack的段地址是
__X-1__。
任务1-2
任务task1_2.asm源码
task1_2调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图
问题回答
① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = __0770__, 寄存器(SS)
= __0771__, 寄存器(CS) = __0772__
② 假设程序加载后,code段的段地址是X,则,data段的段地址是__X-2__, stack的段地址是
__X-1__。
任务1-3
任务task1_3.asm源码
task1_3调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图
问题回答
① 在debug中将执行到line17结束、line19之前,记录此时:寄存器(DS) = __0770__, 寄存器(SS)
= __0772__, 寄存器(CS) = __0774__
② 假设程序加载后,code段的段地址是X,则,data段的段地址是__X-4__, stack的段地址是
__X-2__。
任务1-4
任务task1_4.asm源码task1_4调试到line17结束、line19之前观察寄存器DS, CS, SS值的截图
问题回答
① 在debug中将执行到line9结束、line11之前,记录此时:寄存器(DS) = __0772__, 寄存器(SS) =
__0774__, 寄存器(CS) = __0770__
② 假设程序加载后,code段的段地址是X____,则,data段的段地址是__X+2__, stack的段地址
是__X+4__。
任务1-5
基于上述四个实验任务的实践、观察,总结并回答:
① 对于如下定义的段,程序加载后,实际分配给该段的内存空间大小是 __2*[N/16] B_([]为向上取整)_。
xxx segment 
    db N dup(0) 
xxx ends
② 如果将程序task1_1.asm, task1_2.asm, task1_3.asm, task1_4.asm中,伪指令 end start 改成
end , 哪一个程序仍然可以正确执行。结合实践观察得到的结论,分析、说明原因。
程序task1_4.asm可以正确执行,因为end start指明了程序从start开始执行,不指定默认CS为DS+10H,只有task1_4.asm的程序段在最上面,可以正确执行,其余会出错,如图:

实验任务2

代码:

assume cs:code

code segment
start:
    mov ax,0b800h
    mov ds,ax
    mov ax,0403h
    mov bx,0f00h
    mov cx,50h
s:
    mov [bx],ax
    add bx,2
    loop s
    
    mov ah,4ch
    int 21h
code ends
end start

运行截图:

 实验任务3

代码:

assume cs:code
data1 segment
    db 50, 48, 50, 50, 0, 48, 49, 0, 48, 49 ; ten numbers
data1 ends

data2 segment
    db 0, 0, 0, 0, 47, 0, 0, 47, 0, 0       ; ten numbers
data2 ends

data3 segment
    db 16 dup(0)
data3 ends

code segment
start:
    mov ax,data1
    mov ds,ax
    mov bx,0
    mov cx,0ah
s:
    mov ax,[bx]
    add ax,10h[bx]
    mov 20h[bx],ax
    inc bx
    loop s
    
    mov ah,4ch
    int 21h
code ends
end start

相加前:

 相加后:

 实验任务4

代码:

assume cs:code,ss:stack

data1 segment
    dw 2, 0, 4, 9, 2, 0, 1, 9
data1 ends 

data2 segment
    dw 8 dup(?)
data2 ends

stack segment
    dw 8 dup(?)
stack ends

code segment
start:
    mov ax,stack
    mov ss,ax
    mov sp,8
    
    mov ax,data1
    mov ds,ax
    mov bx,0
    mov cx,8
s:
    push [bx]
    add bx,2
    loop s
    
    mov ax,data2
    mov ds,ax
    mov bx,0
    mov cx,8
s2:
    pop [bx]
    add bx,2
    loop s2
    
    mov ah, 4ch
    int 21h
code ends
end start

存储前:

存储后: 

 实验任务5

代码:

assume cs:code, ds:data
data segment
        db 'Nuist'
        ;db 2, 3, 4, 5, 6
        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

运行结果:

 

 line19的作用是变为大写字母

line4的作用是设置颜色

实验任务6

代码:

assume cs:code, ds:data, ss:stack

data segment
    db 'Pink Floyd      '
    db 'JOAN Baez       '
    db 'NEIL Young      '
    db 'Joan Lennon     '
data ends

stack segment
    dw 1 dup(?)
stack ends

code segment
start:
    mov ax,stack
    mov ss,ax
    mov sp,1
    
    mov ax,data
    mov ds,ax
    
    mov ax,data
    mov es,ax
    mov cx,4
s:
    push cx
    mov bx,0
    mov cx,4

s2:
    mov al,es:[bx]
    or al,20h
    mov es:[bx],al
    inc bx
    loop s2
    
    pop cx
    mov ax,es
    inc ax
    mov es,ax
    
    loop s
   
    mov ah, 4ch
    int 21h
code ends
end start

转换前:

转换后:

 实验任务7

代码:

assume cs:code, ds:data, es:table,ss:stack

data segment
    db '1975', '1976', '1977', '1978', '1979' 
    dd  16, 22, 382, 1356, 2390
    dw  3, 7, 9, 13, 28 
data ends

table segment
    db 5 dup( 16 dup(' ') )  ;
table ends

stack segment
    dw 1 dup(?)
stack ends

code segment
start:
    mov ax,stack
    mov ss,ax
    mov sp,1
    mov ax,data
    mov ds,ax
    mov ax,table
    mov es,ax
    
    mov di,0;data
    
;1
    mov bx,0;table
    mov si,0;table
    mov cx,5
year:
    push cx
    mov cx,4
    
year2:
    mov al,ds:[di]
    mov es:[bx+si],al
    inc si
    inc di
    loop year2
    
    pop cx
    add bx,10h
    mov si,0
    loop year
    
;2
    mov bx,0
    mov si,5
    mov cx,5
income:
    push cx
    mov cx,4
    
income2:
    mov al,ds:[di]
    mov es:[bx+si],al
    inc si
    inc di
    loop income2
    
    pop cx
    add bx,10h
    mov si,5
    loop income
    
;3
    mov bx,0
    mov si,10
    mov cx,5
num:
    push cx
    mov cx,2
    
num2:
    mov al,ds:[di]
    mov es:[bx+si],al
    inc si
    inc di
    loop num2
    
    pop cx
    add bx,10h
    mov si,10
    loop num

;4
    mov bx,0
    mov si,5
    mov cx,5
cal:
    mov ax,word ptr es:[bx+si]
    add si,2
    mov dx,word ptr es:[bx+si]
    add si,3
    div word ptr es:[bx+si]
    add si,3
    mov word ptr es:[bx+si],ax
    
    add bx,10h
    mov si,5
    loop cal
    
    mov ah, 4ch
    int 21h
code ends
end start

原始数据信息截图

 

 结构化写入后的截图:

 

 

 

posted @ 2021-11-08 14:09  AIM2019  阅读(68)  评论(2)    收藏  举报