若余相思 发表于 2017-9-8 22:45:23

实验五

(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
               
                mov bx, 0
               
                push ds:
                push ds:
                pop ds:
                pop ds:
               
                mov ax, 4c00H
                int 21H
       
code ends
end start

data段中的数据不会改变
cs、ss、ds中的内容视不同的电脑不同的操作系统而不同
如果code段的地址为X,则data段中的地址为X-2, stack段中的地址为X-1。

(2)代码:
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
               
                mov bx, 0
               
                push ds:
                push ds:
                pop ds:
                pop ds:
               
                mov ax, 4c00H
                int 21H
       
code ends
end start

前三个问题跟(1)的答案一样
第四个问题的答案是16 * (N / 16 + 1),如果一个段中的数据不同16个字节他/它会补完16个字节

(3)代码:
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
               
                mov bx, 0
               
                push ds:
                push ds:
                pop ds:
                pop ds:
               
                mov ax, 4c00H
                int 21H
               

code ends

data segment

        dw 0123H, 0456H
       
data ends

stack segment

        dw 0, 0
       
stack ends

end start

data段中的数据不会改变
cs、ss、ds中的内容视不同的电脑不同的操作系统而不同
如果code段中的地址为X,则data段中的段地址为X + 3, stack段的段地址为X + 4

(4)   第(3)程序可以正常执行,因为编译器是从上而下来编译的

(5)代码:
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

        db 0, 0, 0, 0, 0, 0, 0, 0
       
c ends

code segment

start : mov ax, a
                mov ds, ax
               
                mov ax, c
                mov es, ax
               
                mov bx, 0
                mov cx, 8
               
        s : mov al,
                add es:, al
                inc bx
               
                loop s
               
                mov ax, b
                mov ds, ax
               
                mov al, 0
                mov bx, 0
                mov cx, 8
        s0: mov al,
                add es:, al
                inc bx
               
                loop s0
               
                mov ax, 4c00H
                int 21H
               
code ends
end start

实现了将a和b段的数据相加到c段中

(6)代码:
assume cs : code

a segment

        dw 1, 2, 3, 4, 5, 6, 7, 8
       
a ends

b segment

        dw 0, 0, 0, 0, 0, 0, 0, 0
       
b ends

code segment

start : mov ax, b
                mov ss, ax
                mov sp, 16
               
                mov ax, a
                mov ds, ax
               
                mov bx, 0
                mov cx, 8
               
        s : push
                add bx, 2
               
                loop s
               
                mov ax, 4c00H
                int 21H
               
code ends
end start

实现将a段的数据逆序放在b段中。
页: [1]
查看完整版本: 实验五