汇编语言子程序问题
小生刚学汇编,使用子程序是出现不解问题:打算使用寄存器作为入口参数就例如movbx,offsetnum传bx到了子程序后打算用[bx]调用原num变量但是始终不成功请问是...
小生刚学汇编,使用子程序是出现不解问题:
打算使用寄存器作为入口参数
就例如 mov bx,offset num
传bx 到了子程序后打算用[bx]调用原num变量
但是始终不成功
请问是怎么回事
部分源程序:
;数据段:
string db 'abcdef'
;代码段:
mov bx,offset string
;子程序:
;要逐个比较string中的字符
cmp [bx][di],'a'
;另外使用加减法这个指令也不行
add [bx][di],20h
sub [bx][di],20h 展开
打算使用寄存器作为入口参数
就例如 mov bx,offset num
传bx 到了子程序后打算用[bx]调用原num变量
但是始终不成功
请问是怎么回事
部分源程序:
;数据段:
string db 'abcdef'
;代码段:
mov bx,offset string
;子程序:
;要逐个比较string中的字符
cmp [bx][di],'a'
;另外使用加减法这个指令也不行
add [bx][di],20h
sub [bx][di],20h 展开
2个回答
展开全部
楼主劳驾您把代码贴出来好么?
对的方式一般只有一个,但错误的方式是有很多的,你想让别人猜你是怎么错的么?
======================================================================
这个错误我看到不同人犯不下10次了- -,我也犯过这个错误
如果指令的操作数无法确定数据的位数的话,就必须加ptr
举个例子:
比如cmp [bx][di],al
在指令中al是8位的,所以这条指令的数据可以确定是8位的,因为mov,cmp等的多个操作数的位数都必须是一样的,所以操作数中只要有一个位数可以确定,就不用加ptr,如果像你那样的话,就必须这样写:
cmp byte ptr [bx][di],'a'
类似的,如果是字型的数据的话,就用word ptr
对的方式一般只有一个,但错误的方式是有很多的,你想让别人猜你是怎么错的么?
======================================================================
这个错误我看到不同人犯不下10次了- -,我也犯过这个错误
如果指令的操作数无法确定数据的位数的话,就必须加ptr
举个例子:
比如cmp [bx][di],al
在指令中al是8位的,所以这条指令的数据可以确定是8位的,因为mov,cmp等的多个操作数的位数都必须是一样的,所以操作数中只要有一个位数可以确定,就不用加ptr,如果像你那样的话,就必须这样写:
cmp byte ptr [bx][di],'a'
类似的,如果是字型的数据的话,就用word ptr
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询