鱼C论坛

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

求助,字节长度的定义

[复制链接]
发表于 2023-11-13 23:24:34 | 显示全部楼层 |阅读模式

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

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

x

问,还是当作栈空间,完全是靠程序中具体的汇编指令,和汇编指令对 CS:IP、SS:SP、DS 等寄存器的设置来决定的。完全可以将程序 6.4 写成下面的样子,实现同样的功能。
转为Word
assume cs:b,ds:a,ss:c
a segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h;>>>>>>>>>>>>>>>>>>>>(请解析下,该处与20h的关系怎么理解)
a ends
c segment
dw 0,0,0,0,0,0,0,0,0,0,0,00,0,0,0
c ends

b segment
d: mov ax,c

mov ss,axmov'sp,20h;       >>>>>>>>>>>>>>>>该处与20h的关系是怎么理解
;希望用c段当作栈空间,设置 ss:sp 指向 c:20
mov ax,a
mov ds,ax
mov bx,0
mov cx,8s: push [bx]
add bx,2loop s
;希望用 ds:bx 访问a 段中的数据,ds 指向 a 段
;ds:bx 指向 a 段中的第一个单元
;以上将 a 段中的 0~15 单元中的 8 个字型数据依次入栈
mov bx,0
mov cx,8
s0: pop [bx]
add bx,2
loop s0
;以上依次出栈 8 个字型数据到 a 段的 0~15 单元中
mov ax,4c00h
int 21h
b ends
end d
;d 处是要执行的第一条指令,即程序的入口
实验5编写、调试具有多个段的程序
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-13 23:24:46 | 显示全部楼层
这个问题中涉及到汇编语言的一些概念和指令,主要是关于段寄存器和栈的操作。在这段代码中,我们可以看到  b  段的代码中有一行  mov ss,ax  和  mov sp,20h  的指令,这两行指令的作用是设置栈的段寄存器和栈指针。 mov ss,ax  将  ax  寄存器中的值赋给栈段寄存器  ss , mov sp,20h  将栈指针寄存器  sp  设置为  20h 。

在这段代码中, c  段被当作栈空间,通过设置  ss  寄存器和  sp  寄存器的值,来指向  c  段的起始位置。这样程序就可以使用  c  段来作为栈空间,进行栈操作。

需要注意的是, 20h  是一个十六进制数,表示的是栈指针的初始位置。这里的  20h  可能是作者根据具体的程序需求选择的一个初始栈指针位置。根据具体的程序需求,初始栈指针位置可能会有所不同。

另外, assume cs:b,ds:a,ss:c  这一行是用来定义段寄存器和段的关联关系的,它告诉汇编器如何将段名和段寄存器联系起来。

总的来说,这段代码中的  mov ss,ax  和  mov sp,20h  的作用是设置栈段寄存器和栈指针,将  c  段作为栈空间,并将栈指针初始化为  20h 。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-13 23:26:30 | 显示全部楼层
根据你提供的代码,我理解你的问题是关于栈空间和寄存器的设置。

在代码中,mov ss, ax 是将 ax 寄存器中的值(即 c 段的段地址)移动到 ss 寄存器中,mov sp, 20h 是将 20h 这个值设置为栈指针寄存器 sp 的值。这里的20h表示栈的大小,即设置栈空间为32字节。因此,通过设置 ss:sp 指向 c 段的偏移地址20h,实现了将 c 段作为栈空间的功能。

接下来,mov ds, ax 是将 ax 寄存器中的值(即 a 段的段地址)移动到 ds 寄存器中。这样,通过设置 ds 指向 a 段,就可以使用 ds:bx 访问 a 段中的数据。

然后,通过循环将 a 段中的数据依次入栈,再通过循环将栈中的数据依次出栈到 a 段中。

最后,int 21h 是调用 DOS 功能,具体是退出程序。4c00h 是 DOS 终止程序的功能号。

总结一下,这段代码的目的是利用 c 段作为栈空间,并使用 ds:bx 访问 a 段中的数据,实现数据的入栈和出栈操作。如果还有其他问题,请继续提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-11-14 11:29:40 | 显示全部楼层
isdkz 发表于 2023-11-13 23:24
这个问题中涉及到汇编语言的一些概念和指令,主要是关于段寄存器和栈的操作。在这段代码中,我们可以看到   ...

请问dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h;这句怎么知道它的字节长度是20h,我对栈的理解还是可以的,但这里我看的还是不清楚,请各位指教下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 18:07

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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