(1)
①0123h,0456h,0789h,0abch,0fedh,0cbah,0987h,0000h
②076ch,076bh,076ah
③x-2,x-1
(2)
①0123h,0456h,0000h,0000h,0000h,0000h
②076ch,076bh,076ah
③x-2,x-1
④N个字节(如:code段)
(3)
①0123h,0456h,0000h,0000h,0000h,0000h
②076ah,076eh,076dh
③x+3,x+4
(4)
(3)题程序可以正确执行。
查资料得知:
将最后一条伪指令“end start”改为“end”,即没有指明程序入口,此时程序就会从加载进内存的第一个单元起开始执行。在(1)(2)题中,都是数据先加载进内存,不能保证最终被正确执行;而(3)题则是代码段先被加载进内存,因而可以被正确执行。
(5)
mov ax, c
mov ss, ax
mov ax, a
mov ds, ax
mov ax, b
mov es, ax
mov ax, 0
mov bx, 0
mov cx, 8
s:mov al, ds:[bx]
add al, es:[bx]
mov ss:[bx], al
inc bx
loop s
mov ax, 4c00h
int 21h
一开始不敢使用ss存储c段的段地址,看了论坛讨论后茅塞顿开,是自己太死板了
(6)
assume cs: code
a segment
dw 1, 2, 3, 4, 5, 6, 7, 8, 9, 0ah, Obh, 0ch, 0dh, 0eh, 0fh, Offh
a ends
b segment
dw 0,0,0,0,0,0,0,0
b ends
code seament
start:mov ax, a
mov ds, ax
mov ax, b
mov ss, ax
mov sp, 16
mov cx, 8
mov bx, 0
s:push [bx]
add bx, 2
loop s
mov ax, 4c00h
int 21h
code ends
end start