鱼C论坛

 找回密码
 立即注册
查看: 2922|回复: 13

[已解决]汇编调试问题

[复制链接]
发表于 2017-7-12 21:07:15 | 显示全部楼层 |阅读模式

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

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

x
QQ截图20170712210532.png       为什么我定义数据段 但是视频里面并没有那多出来的16个字节呢?   
最佳答案
2017-7-15 01:08:03
本帖最后由 人造人 于 2017-7-15 01:10 编辑


我刚刚看了一下那个视频,对于那个程序 ds = cs - 2 这没有问题,是正确的
但是这个规律不具有通用性,也就是说,对于其他程序,无效
不信?
你试试这个程序

assume cs:code

data segment

msg:
        db 'hello world!', '$'
data ends

code segment
start:
        mov ax, data
        mov ds, ax
        
        mov dx, msg
        mov ah, 9
        int 21h
        
        mov ax,4C00H
        int 21H

code ends

end start

还是 ds = cs - 2 吗?
所以,最好还是
mov ax, data
mov ds, ax
这样,比较好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2017-7-12 21:12:07 | 显示全部楼层
会不会是环境问题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-12 21:47:51 | 显示全部楼层
你要是想要获取到数据的地址就要
mov ax,data
mov ds,ax
你的程序没有寻data地址的语句、怎么能期望找到它
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-13 09:55:42 | 显示全部楼层
本帖最后由 3-3 于 2017-7-13 16:09 编辑

sub a,2
这句话执行之后,并没有回到data的偏移地址,sub -2 应该是回到了 data  中的'n'。
assume 只是设定了段的伪指令语句,它不能设置段寄存器的值,所以在程序中还需要通过指令语句来给数据段寄存器赋值,多实践就好了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-14 12:56:12 | 显示全部楼层
云野 发表于 2017-7-12 21:47
你要是想要获取到数据的地址就要
mov ax,data
mov ds,ax

之前试过data   获取的地址不对   跟视频不一样必须要-2 -1才能获取
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-14 12:59:14 | 显示全部楼层
3-3 发表于 2017-7-13 09:55
sub a,2
这句话执行之后,并没有回到data的偏移地址,sub -2 应该是回到了 data  中的'n'。
assume 只是 ...

我那个-2  是用来获取正确的ds      你注意看我初始化的那个ds是不对的    不知道是什么问题 视频中不用-2 初始化就是正确的  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-14 16:36:40 | 显示全部楼层
本帖最后由 人造人 于 2017-7-14 16:42 编辑

试试这个
assume cs:code

data segment

msg:
        db 'hello world!', '$'
data ends

code segment
start:
        mov ax, data
        mov ds, ax
       
        mov dx, msg
        mov ah, 9
        int 21h
       
        mov ax,4C00H
        int 21H

code ends

end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-14 20:52:47 | 显示全部楼层
人造人 发表于 2017-7-14 16:36
试试这个
assume cs:code

QQ截图20170714205014.png 前16个字节确实不见了  版主你这个有什么区别?能说下?  我记得ds也可以cs-2来获取的么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-14 21:31:43 | 显示全部楼层
耶稣 发表于 2017-7-14 20:52
前16个字节确实不见了  版主你这个有什么区别?能说下?  我记得ds也可以cs-2来获取的么?

“我记得ds也可以cs-2来获取的么?”

你从哪听说的?我怎么不知道?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-15 00:11:12 | 显示全部楼层
人造人 发表于 2017-7-14 21:31
“我记得ds也可以cs-2来获取的么?”

你从哪听说的?我怎么不知道?

我记得之前我看过一节小甲鱼的汇编    cs-2也可以得到ds地址   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-15 00:11:35 | 显示全部楼层
人造人 发表于 2017-7-14 21:31
“我记得ds也可以cs-2来获取的么?”

你从哪听说的?我怎么不知道?

汇编第6章第3节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-15 00:12:10 | 显示全部楼层
人造人 发表于 2017-7-14 21:31
“我记得ds也可以cs-2来获取的么?”

你从哪听说的?我怎么不知道?

http://bbs.fishc.com/forum.php?m ... p;page=1#pid2944498   之前发过一个关于这个问题的帖子 你看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-15 01:08:03 | 显示全部楼层    本楼为最佳答案   
本帖最后由 人造人 于 2017-7-15 01:10 编辑


我刚刚看了一下那个视频,对于那个程序 ds = cs - 2 这没有问题,是正确的
但是这个规律不具有通用性,也就是说,对于其他程序,无效
不信?
你试试这个程序

assume cs:code

data segment

msg:
        db 'hello world!', '$'
data ends

code segment
start:
        mov ax, data
        mov ds, ax
        
        mov dx, msg
        mov ah, 9
        int 21h
        
        mov ax,4C00H
        int 21H

code ends

end start

还是 ds = cs - 2 吗?
所以,最好还是
mov ax, data
mov ds, ax
这样,比较好
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-15 11:38:44 | 显示全部楼层
人造人 发表于 2017-7-15 01:08
我刚刚看了一下那个视频,对于那个程序 ds = cs - 2 这没有问题,是正确的
但是这个规律不具有通用性 ...

好的谢谢  版主热情答复   之前我用data直接复制ax 也是错的    后面用CS-2正确所以就一直认为我环境有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 10:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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