注册 登录
编程论坛 汇编论坛

汇编中db与dw的区别(2) 。。。

admin_xyz 发布于 2012-07-11 20:08, 3253 次点击
程序代码:
assume cs:code,ds:data

data segment

    db    '中国'       ;这里为什么db是对的,dw是错的。 一个汉字不是占两个字节么...

    dw    0
                ;程序实现把中国!放入dw定义的内存单元中
data ends

code segment

start:
    mov    ax, data
    mov    ds, ax
    mov    bx, 16

    mov    ax, [0]
    mov    [bx], ax    ;ds:10h里面什么也没有,不知道为什么


    mov    ax, 4c00h
    int    21h

code ends

end start
24 回复
#2
zklhp2012-07-11 20:31
首先 你没往那里面放 自然 什么都没有是可能的

一般运行16位程序都是在虚拟机里运行的 比较干净 什么都没有是正常的
#3
lonmaor2012-07-11 20:34
回复 2楼 zklhp
如果把 '中国'换成 'china'则ds:0是有数据显示的,难道是中文支持的问题?
#4
zklhp2012-07-11 20:34
为啥用db呢 这里是定义字符串 规定用db 对于汉字 会自动转成相应的数据放进去的 不用你操心 当然能不能显示是另外一回事了
#5
zklhp2012-07-11 20:35
以下是引用lonmaor在2012-7-11 20:34:04的发言:

如果把 '中国'换成 'china'则ds:0是有数据显示的,难道是中文支持的问题?

写英语 ds:10h 里面有东西了?
#6
zklhp2012-07-11 20:36
我上面说的是ds:10h没东西
#7
lonmaor2012-07-11 20:43
回复 6楼 zklhp
用emu8086调试的,如果是db '中国'

只有本站会员才能查看附件,请 登录

如果是db 'china'

只有本站会员才能查看附件,请 登录


emu8086默认exe模板的data segment定义
程序代码:
data segment
    ; add your data here!
    db    '中国'       ;这里为什么db是对的,dw是错的。 一个汉字不是占两个字节么...

    dw    0

    pkey db "press any key...$"
ends
下面press any key...就忽略了吧
#8
admin_xyz2012-07-11 20:51
为什么不能用dw 呢...    汇编里面有字是不是和汉字没关系...
#9
zklhp2012-07-11 20:54
对啊 说明中国俩字没转 看来连中文的定义都不行 更不用说显示了

结论 中文基本不支持
#10
zklhp2012-07-11 20:57
以下是引用admin_xyz在2012-7-11 20:51:04的发言:

为什么不能用dw 呢...    汇编里面有字是不是和汉字没关系...
有没有关系我也不知道

定义字符串 就是用db 编译器自动转成

db 12,13,14

这样的形式

对于中文 一样 只不过是根据编码转换成相应的数罢了

以前我以为这个能定义中文 也就是能把中文转成数 现在看上面的测试 是不能的

为啥中文不能这么定义呢 我觉得原因有以下几个

和英文的字符串对应
实现容易

#11
zklhp2012-07-11 21:02
0B68:0000  23 01 56 04 D6 D0 B9 FA-00 00 00 00 00 00 00 00   #.V.............
0B68:0010  00 00 00 00 00 00 68 0B-00 00 0D 00 6A 0B 6A 05   ......h.....j.j.

我这里是能编译进去的 编译器masm

data segment
    dw 0123h,0456h
    db '中国'
data ends


#12
zklhp2012-07-11 21:05
以下是引用lonmaor在2012-7-11 20:43:21的发言:

用emu8086调试的,如果是db '中国'


如果是db 'china'



emu8086默认exe模板的data segment定义
data segment
    ; add your data here!
    db    '中国'       ;这里为什么db是对的,dw是错的。 一个汉字不是占两个字节么...
 
    dw    0
 
    pkey db "press any key...$"
ends下面press any key...就忽略了吧

这个应该是跟编译器有关罢 你用的啥编译器咧
#13
zklhp2012-07-11 21:07
以下是引用zklhp在2012-7-11 20:57:02的发言:

有没有关系我也不知道

定义字符串 就是用db 编译器自动转成

db 12,13,14

这样的形式

对于中文 一样 只不过是根据编码转换成相应的数罢了

以前我以为这个能定义中文 也就是能把中文转成数 现在看上面的测试 是不能的

为啥中文不能这么定义呢 我觉得原因有以下几个

和英文的字符串对应
实现容易


补充一点

db 12,34
dw 1234

是不一样的 为啥不一样看大尾和小尾模式 我觉得这个也是一个可能的原因
#14
lonmaor2012-07-11 21:15
回复 11楼 zklhp
我也用masmplus调试了一下,发现是可以编译进去,但是即使把中文翻译为ascii码再输出,仍然输出为ascii码而不是中文


[ 本帖最后由 lonmaor 于 2012-7-11 21:16 编辑 ]
#15
zklhp2012-07-11 21:17
以下是引用lonmaor在2012-7-11 21:15:25的发言:

我也用masmplus调试了一下,发现是可以编译进去,但是即使把中文翻译为ascii码再输出,仍然显示不出来
能不能进去是编译器是事 能不能显示是程序和操作系统的事

这个属于DOS程序 由于DOS操作系统默认没有显示中文的功能 所以显示不了

显示中文 要么用汉卡等 要么用程序提供一个显示接口 貌似叫什么中断 要么 自己带字库显示
#16
admin_xyz2012-07-11 21:23
唉...为什么发明电脑的不是中国人呢.. 真想一天能这样写代码...

定义 字符串 = “你好,世界!"

= =#  yy下...
大致懂了...debug和编译器里面不支持中文...
#17
lonmaor2012-07-11 21:23
以下是引用zklhp在2012-7-11 21:17:12的发言:

能不能进去是编译器是事 能不能显示是程序和操作系统的事

这个属于DOS程序 由于DOS操作系统默认没有显示中文的功能 所以显示不了

显示中文 要么用汉卡等 要么用程序提供一个显示接口 貌似叫什么中断 要么 自己带字库显示
现在的win7/xp自带的终端窗口不是能正常显示中文么?
实环境的dos需要中文字库+直接写屏,我以为现在不需要了的
有点奇怪的是,虚拟机装xp,进入cmd后打debug回车,明显看到系统自动切换成另一个dos窗口了,而这个新的dos窗口貌似是不可以显示中文的吧
#18
zklhp2012-07-11 21:28
cmd.exe



上面那个是自带的终端 支持中文

下面那个是用于兼容16位程序的 自然不支持中文 会自动切换的
#19
zklhp2012-07-11 21:30
以下是引用admin_xyz在2012-7-11 21:23:23的发言:

唉...为什么发明电脑的不是中国人呢.. 真想一天能这样写代码...

定义 字符串 = “你好,世界!"

= =#  yy下...
大致懂了...debug和编译器里面不支持中文...
百度易语言 就和你这个是一样的

而且 现在的编译器对于unicode支持的比较好 对于unicode来说 所有的字符都是一样的 大家都是unicode嘛 所以 像C语言那样的语言也可以用中文作为变量名 函数等 再加上宏啦 重载啦 实现一个中文的编程环境不难

问题是

1 兼容性
2 程序写作的复杂性
3 性能

#20
admin_xyz2012-07-11 22:57
易语言编译器的作者肯定是大牛...
#21
TonyDeng2012-07-11 23:02
英文DOS下也能显示和处理中文,只是中文字符是用图形画出来的,工作在图形模式下,不是文本模式。
#22
TonyDeng2012-07-11 23:07
正统的debug程序是文本模式的,要显示中文,需要修改其字符输出模式,改为调用BIOS中断或DOS中断,早期国内的debug程序都经过“改良”,是可以处理中文的。
#23
admin_xyz2012-07-12 07:27
这样啊,那懂了.谢谢版主们.
#24
笨蛋编程2012-07-13 23:32
   mov    ax, [0]
   mov    [bx], ax    ;ds:10h里面什么也没有,不知道为什么
初学汇编
我记得教学里教的说
这句话这样翻译
    mov    ax, 0
    mov    [bx], ax    ;ds:10h里面什么也没有,不知道为什么
#25
zklhp2012-07-14 12:00
以下是引用笨蛋编程在2012-7-13 23:32:15的发言:

   mov    ax, [0]
   mov    , ax    ;ds:10h里面什么也没有,不知道为什么
初学汇编
我记得教学里教的说
这句话这样翻译
    mov    ax, 0
    mov    , ax    ;ds:10h里面什么也没有,不知道为什么
这是某些版本masm的一个bug
1