cs宇帝 发表于 2023-11-9 16:08:43

汇编语言

请问为什么.设程序加载后,code段的段地址为X,则data段的段地址为___,stack段的段地址为___。
A:X+3, X+4
为什么是+3,+4
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
               
                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

isdkz 发表于 2023-11-9 16:09:59

在这段汇编程序中, code 段的段地址为X。在这个程序中,我们使用了 assume 语句来定义了各个段的默认段寄存器的值。根据这个 assume 语句, cs 寄存器默认指向 code 段, ds 寄存器默认指向 data 段, ss 寄存器默认指向 stack 段。

在程序的开头,我们将 ax 寄存器设置为 stack 段的基地址,然后将其赋值给 ss 寄存器,这样就将 ss 寄存器的值设置为 stack 段的段地址。接着,我们将 sp 寄存器设置为16,这样就将栈顶指针初始化为16。

然后,我们将 ax 寄存器设置为 data 段的基地址,然后将其赋值给 ds 寄存器,这样就将 ds 寄存器的值设置为 data 段的段地址。

接下来,我们执行了一系列的 push 和 pop 指令来操作栈。这些指令使用了 ds 寄存器来访问 data 段中的数据。

最后,我们将 ax 寄存器设置为4c00h,然后执行 int 21h 来终止程序。

根据以上的解释,我们可以得出以下结论:

·code 段的段地址为X。
·data 段的段地址为X+3。因为在程序中,我们将 ds 寄存器设置为 data 段的基地址,而 ds 寄存器的默认值为 code 段的段地址,所以 data 段的段地址为 code 段的段地址加上3。
·stack 段的段地址为X+4。因为在程序中,我们将 ss 寄存器设置为 stack 段的基地址,而 ss 寄存器的默认值为 code 段的段地址,所以 stack 段的段地址为 code 段的段地址加上4。

所以,答案是A:X+3, X+4。

cs宇帝 发表于 2023-11-9 16:27:32

是我哪儿落了吗,为啥看不懂

cs宇帝 发表于 2023-11-9 16:29:38

data 段的段地址为X+3。因为在程序中,我们将 ds 寄存器设置为 data 段的基地址,而 ds 寄存器的默认值为 code 段的段地址,所以 data 段的段地址为 code 段的段地址加上3。
默认不应该data吗
页: [1]
查看完整版本: 汇编语言