- end start 标号可以通知编译器程序的入口地址为 start 标号,例子见 累加数字2,start 本身不是固定的,可以使用任何合法的标号
- 下面的程序实现依次用内存 0:0~0:15 单元中的内容改写程序中的数据,完成程序:
assume cs:codesg
code segment
dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
start:
mov ax, 0
mov ds, ax
mov bx, 0
mov cx, 8
s:
mov ax, [bx]
mov cs:[bx], ax
add bx, 2
loop s
mov ax, 4c00h
int 21h
codesg ends
end start
- 下面的程序实现一次用内存 0:0~0:15 单元中的内容改写程序中的数据,数据的传送用栈来进行。栈空间设置在程序内,完成程序:
assume cs:codesg
codesg segment
dw 0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h
dw 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
start:
mov ax, cs
mov ss, ax
mov sp, 0024h
mov ax, 0
mov ds, ax
mov bx, 0
mov cx, 8
s:
push [bx]
pop cs:[bx]
add bx 2
loop s
mov ax, 4c00h
int 21h
codesg ends
end start
- 将下面的程序编译、连接,用 Debug 加载、跟踪,然后回答问题
* CPU 执行程序,程序返回前,data 段中的数据为多少? 「不变」
* 设程序加载后,code 段的段地址为 X,则 data 段的段地址为「X-2」,stack 段的段地址为「X-1」
- 将下面的程序编译、连接,用 Debug 加载、跟踪,然后回答问题
* CPU 执行程序,程序返回前,data 段中的数据为多少? 「不变」
* 设程序加载后,code 段的段地址为 X,则 data 段的段地址为「X-2」,stack 段的段地址为「X-1」
- 将下面的程序编译、连接,用 Debug 加载、跟踪,然后回答问题
* CPU 执行程序,程序返回前,data 段中的数据为多少? 「不变」
* 设程序加载后,code 段的段地址为 X,则 data 段的段地址为「X+3」,stack 段的段地址为「X+4」
- 如果将 1、2、3 题中的最后一条伪指令 end start 改为 end,哪个程序仍然可以正确执行?请说明原因。
程序 3 可以正确执行,因为 end start 改为 end 后,程序按顺序执行,程序 3 的代码段放在最前面,因此可以正确执行。
- 程序如下,编写 code 段中的代码,将 a 段和 b 段中的数据依次相加,将结果存在 c 段中。
- 程序如下,编写 code 段中的代码,用 push 指令将 a 段中的前 8 个字型数据,逆序存储到 b 段中