|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
(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: [0]
push ds: [2]
pop ds: [2]
pop ds: [0]
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: [0]
push ds: [2]
pop ds: [2]
pop ds: [0]
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: [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
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, [bx]
add es:[bx], al
inc bx
loop s
mov ax, b
mov ds, ax
mov al, 0
mov bx, 0
mov cx, 8
s0: mov al, [bx]
add es:[bx], 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 [bx]
add bx, 2
loop s
mov ax, 4c00H
int 21H
code ends
end start
实现将a段的数据逆序放在b段中。 |
|