菜鸟求助:汇编代码的重定位

来源:百度知道 编辑:UC知道 时间:2024/06/08 18:28:43
下面的代码在编译的时候提示:invalid operand for OFFSET。怎么不能用offset呢?怎么解决啊?
.code

@test proc
Local szCaption[5]: byte
Local szText[6]: byte
pushad
call @F
@@:
pop ebx
sub ebx, offset @B
mov byte ptr[ebx+offset szCaption], 't'
mov byte ptr[ebx+offset szCaption+1], 'e'
mov byte ptr[ebx+offset szCaption+2], 's'
mov byte ptr[ebx+offset szCaption+3], 't'
mov byte ptr[ebx+offset szCaption+4], 0
mov byte ptr[ebx+offset szText], 'H'
mov byte ptr[ebx+offset szText+1], 'e'
mov byte ptr[ebx+offset szText+2], 'l'
mov byte ptr[ebx+offset szText+3], 'l'
mov byte ptr[ebx+offset szText+4], 'o'
mov byte ptr[ebx+offset szText+5], 0
invoke MessageBox, NULL, addr [ebx+szCaption], addr [ebx+szText], MB_OK
invoke ExitProcess, 0
popad
ret
@test endp

Start:

个人建议,不妨一试:
把"Local szCaption[5]: byte
Local szText[6]: byte "
这两个变量,改为全局变量!
补充:
那就这样吧,再试一次
.code

@test proc
Local szCaption[5]: byte
Local szText[6]: byte
pushad
call @F
@@:
pop ebx
sub ebx, offset @B
lea esi,szCaption
lea edi,szText
mov byte ptr[ebx+esi], 't'
mov byte ptr[ebx+esi+1], 'e'
mov byte ptr[ebx+esi+2], 's'
mov byte ptr[ebx+esi+3], 't'
mov byte ptr[ebx+esi+4], 0
mov byte ptr[ebx+edi], 'H'
mov byte ptr[ebx+edi+1], 'e'
mov byte ptr[ebx+edi+2], 'l'
mov byte ptr[ebx+edi+3], 'l'
mov byte ptr[ebx+edi+4], 'o'
mov byte ptr[ebx+edi+5], 0
invoke MessageBox, NULL, addr [ebx+szCaption], addr [ebx+szText], MB_OK
invoke ExitProcess, 0
popad
ret
@test endp

Start:
call @test
end Start