内联汇编出错(50)

  • 主题发起人 主题发起人 冬月
  • 开始时间 开始时间

冬月

Unregistered / Unconfirmed
GUEST, unregistred user!
var I_ax,I_bx:word;begin asm mov ax,62627
mov ah,31H
mov al,23H
add ax,ax
mov I_ax,ax
mov bx,826cH
mov I_bx,bx
end
Edit1.Text:=String(IntToHex(I_ax,4))
Edit2.Text:=String(IntToHex(I_bx,4));end;
 
procedure TForm1.Button2Click(Sender: TObject);var I_ax,I_bx:word;begin asm push ax
push bx
mov ax,62627
mov ah,31H
mov al,23H
add ax,ax
mov I_ax,ax
mov bx,826cH
mov I_bx,bx
pop bx
pop ax
end
Edit1.Text:=(IntToHex(I_ax,4))
Edit2.Text:=(IntToHex(I_bx,4));end;请别随意更改寄存器内的值,使用完寄存器后,数据一定要复原。请记得结贴哦,我回答问题就为了混分。
 
var I_ax,I_bx:word;begin asm [red]push ebx[/red] [blue]// 你更改过bx的值,ebx的值是Delphi内部要使用的,所以要保存一下[/blue] mov ax,62627
mov ah,[red]31H[/red]
[blue]// delphi是用'$'表示一个十六进制数值而不是用'H'表示[/blue] mov al,[red]23H[/red]
[blue]// delphi是用'$'表示一个十六进制数值而不是用'H'表示[/blue] add ax,ax
mov I_ax,ax
mov bx,[red]826cH[/red]
[blue]// delphi是用'$'表示一个十六进制数值而不是用'H'表示[/blue] mov I_bx,bx
[red]pop ebx[/red] [blue]// 操作完毕后恢复ebx的值[/blue] end
Edit1.Text:=String(IntToHex(I_ax,4))
Edit2.Text:=String(IntToHex(I_bx,4));end;
 
问题解决了,再问下,上面的程序只有ax的时候并不报错,加了bx后为什么要push,pop了呢?
 
BX寄存器里面的数据是有含义的,好像和地址有关,忘记具体什么含义了,AX寄存器只是用于数据处理。解决就好!结贴给分吧,你好像有好多问题没结贴哦,所以才这么催你!
 
多人接受答案了。
 

Similar threads

I
回复
0
查看
711
import
I
I
回复
0
查看
719
import
I
I
回复
0
查看
718
import
I
I
回复
0
查看
628
import
I
I
回复
0
查看
649
import
I
后退
顶部