鱼C论坛

 找回密码
 立即注册
查看: 515|回复: 3

汇编语言

[复制链接]
发表于 2023-11-9 16:08:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问为什么.设程序加载后,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:[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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-9 16:27:32 | 显示全部楼层
是我哪儿落了吗,为啥看不懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-9 16:29:38 | 显示全部楼层
  data 段的段地址为X+3。因为在程序中,我们将 ds 寄存器设置为 data 段的基地址,而 ds 寄存器的默认值为 code 段的段地址,所以 data 段的段地址为 code 段的段地址加上3。
默认不应该data吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 09:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表