练习用小写转成大写,为何编译通不过?求教!该如何解决
练习用小写转成大写,为何编译通不过?求教!
提示*号所在行错误:error A2032: invalid use of register
数据长度应该是相同的8位啊,不知为何
------解决方案--------------------
给你点提示,还记得ptr这个东西么?
------解决方案--------------------
mov byte ptr al,byte ptr [ebx+al]
这条指令,如果你的程序是 Win32 类的,可以改为 mov al, byte ptr [ebx+eax],你的程序在前面不也置 eax 为 0 了,目的就是为此吧。
如果是 dos16 类的程序,可以用 si 或 di 来配合 bx 进行组合寻址。
另外,为了实现完整的转换功能,还应该进行回写吧?即在上面的指令后加上 mov [esi], al 指令
- Assembly code
include io32.inc
.data
msg byte 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
msg1 byte 'hello'
.code
start:
mov ebx,offset msg
mov esi,offset msg1
mov ecx,lengthof msg1
again:
mov eax,0 ; 清零易于操作
mov al,[esi]
sub al,61h
mov byte ptr al,byte ptr [ebx+al]
call dispc
add esi,1
loop again
exit 0
end start
提示*号所在行错误:error A2032: invalid use of register
数据长度应该是相同的8位啊,不知为何
------解决方案--------------------
给你点提示,还记得ptr这个东西么?
------解决方案--------------------
mov byte ptr al,byte ptr [ebx+al]
这条指令,如果你的程序是 Win32 类的,可以改为 mov al, byte ptr [ebx+eax],你的程序在前面不也置 eax 为 0 了,目的就是为此吧。
如果是 dos16 类的程序,可以用 si 或 di 来配合 bx 进行组合寻址。
另外,为了实现完整的转换功能,还应该进行回写吧?即在上面的指令后加上 mov [esi], al 指令