1)
1.不变
2.cs=07E4,ss=07E3,ds=07E2
3.X-2,X-1
2)
1-3同(1)
4.(N/16+1)*16
一个内存段所占的字节数必然为16的倍数,也就是说,即使我们只需要存放9个字节,分配给我们的内存段也会是16个字节容量的内存段。
3)
1.不变
2.cs=07E2,ss=07E6,ds=07E2
3.x+3,x+4
4)
第三个程序。
一个程序执行结果正确的前提是IP(程序入口)应该指向代码段的第一条语句。end:start的作用就是规定IP的指向(程序入口)。如果没有end:start,编译器会默认代码第一条语句为程序入口。第1,2个程序中CPU会错误地把内存数据当成机器码读取,程序执行结果一定是错误的。
5)
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
6)
start:
mov ax,a
mov ds,ax
mov ax,b
mov ss,ax
mov sp,16
mov bx,0
mov cx,8
s:push [bx]
add bx,2
loop s