鱼C论坛

 找回密码
 立即注册
查看: 3012|回复: 5

dw '137'出现error a2084

[复制链接]
发表于 2014-5-9 16:27:26 | 显示全部楼层 |阅读模式
10鱼币
assume ds:datasg, cs:codesg

datasg segment
        db 'DEC'
        db 'Ken Oslen'
        dw '137'
        dw '40'
        db 'PDP'
datasg ends

codesg segment
        start:        mov ax, datasg
                        mov ds, ax
                        mov bx, 0000h
                        mov word ptr [bx + 0ch], 38
                        add word ptr [bx + 0eh], 70
                        mov si, 0000h
                        mov byte ptr [bx + 10h + si], 'V'
                        inc si
                        mov byte ptr [bx + 10h + si], 'A'
                        inc si
                        mov byte ptr [bx + 10h + si], 'X'
                        
                        mov ax, 4c00h
                        int 21h
codesg ends
end start
将8.6的例子变现后,ml不成功,出现的问题就是1.asm[6]  error a2084,第六行的语句为dw ‘137’
经过百度的搜索,没有得到自己想要答案,而且 dw ‘40’没有出问题,为什么dw ‘137’反而出现问题了呢?

最佳答案

查看完整内容

经过我的多次实验,发现 dw 'XX' ,单引号里面必须 小于 或者 等于 2个 ,cpu应该是这样子的,他每个 单引号 的内容作为 一个字型数据,所以 里面的数据不能大于 2个字节, 只能小于或者等于2个自己,如果是小于2个字节,你就会在高位自动加 0 填补, 如果你只想显示3个字符的那,你可以这样 dw '13','7' 这样也是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-9 16:27:27 | 显示全部楼层

经过我的多次实验,发现 dw 'XX' ,单引号里面必须 小于 或者 等于 2个  ,cpu应该是这样子的,他每个 单引号 的内容作为 一个字型数据,所以 里面的数据不能大于 2个字节, 只能小于或者等于2个自己,如果是小于2个字节,你就会在高位自动加 0 填补, 如果你只想显示3个字符的那,你可以这样 dw '13','7'  这样也是一样的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-9 17:51:40 | 显示全部楼层
dw 是定义字型数据(占两个字节),而一个字符只占一个字节,‘40’是2个字节,刚好占一个字型数据,‘137’是3个字节,不是2的倍数,你让cpu怎么确认另一个字节是多少?

反正就是一句话,你要定义dw类型数据,必须要给 2 的倍数个字符,也就是偶数个。 记住是这里数说的是字符也就是  单引号  里面的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-9 17:53:09 | 显示全部楼层

dw 是定义字型数据(占两个字节),而一个字符只占一个字节,‘40’是2个字节,刚好占一个字型数据,‘137’是3个字节,不是2的倍数,你让cpu怎么确认另一个字节是多少?

反正就是一句话,你要定义dw类型数据,必须要给 2 的倍数个字符,也就是偶数个。 记住是这里数说的是字符也就是  单引号  里面的数据
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-9 20:09:19 | 显示全部楼层
xiaosawanjava 发表于 2014-5-9 17:53
dw 是定义字型数据(占两个字节),而一个字符只占一个字节,‘40’是2个字节,刚好占一个字型数据,‘13 ...

谢谢你解开我的第一个疑惑,不错按照你所说CPU确实无法定义空缺字节,所以我按照你的说法改变原有定义
‘0134’,但是ml 依旧无法通过,错误显示error a2084
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-9 23:43:18 | 显示全部楼层
xiaosawanjava 发表于 2014-5-9 21:17
经过我的多次实验,发现 dw 'XX' ,单引号里面必须 小于 或者 等于 2个  ,cpu应该是这样子的,他每个 单引 ...

没想到你还是你提醒我了,这个错误的查找方向一开始就错了,我一直没有想到在百度上查找dw伪指令的使用,下面是我查找到的,希望能对你也有帮助,附上链接http://bdxnote.blog.163.com/blog/static/844423520096137403605/
对于字节型(DB)变量,每个变量的大小为1个字节,每个变量的值不能超过1个字符,每个字节内存入一个字符的ASCII码值,整个字符串可以在同一对单引号内给出,这相当于是定义了一个字符数组,如DATA5;
对于字类型(DW)变量,每个变量的大小为2个字节,每个变量的值不能超过2个字符,若为2个字符时,同样遵循高位存入高字节,低位存入低字节的规则;若为1个字符,则该字符的ASCII码值存入到低字节,高字节为00,如DATA6;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-8 11:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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