永发信息网

汇编求解释

答案:2  悬赏:50  手机版
解决时间 2021-04-13 06:58
c++中嵌入的汇编代码unsigned long head=1__asm{pushad; mov eax,head; bsr ecx,eax; mov edx,dword ptr 31; sub edx,ecx; mov ecx,edx; mov eax,dword ptr 0x01; sal eax,cl; mov head,eax; popad;}这段代码的含义是什么

unsigned long head=1__asm{pushad; mov eax,head; bsr ecx,eax; mov edx,dword ptr 31; sub edx,ecx; mov ecx,edx; mov eax,dword ptr 0x01; sal eax,cl; mov head,eax; popad;}
最佳答案
unsigned long head=1;
__asm{
pushad; //将EAX ECX EDX EBX ESP(该指令执行之前的初始值) EBP ESI EDI分别入堆栈。
mov eax,head; //将head的值传送到eax寄存器中
bsr ecx,eax; //这个你要知道bsr指令是什么意思,扫描eax中第一位为1的位数,此时eax中为1所以执行后ecx中的值是15,因为eax是16位的寄存器;
mov edx,dword ptr 31;//?这个地方应该是[31]表示将地址31处的双字,也就是32位的数赋值给edx
sub edx,ecx; //edx中值减去ecx中值
mov ecx,edx; //将上述差值传送到ecx
mov eax,dword ptr 0x01; //将0x01处值,双字,也就是32位的一个数传送到eax中去
sal eax,cl; //将eax寄存器中的值左移,左移的位数由cl决定,即ecx寄存器低八位的数决定
mov head,eax; //将eax寄存器值传送到head变量中去
popad; //导出之前入堆栈的值

}
全部回答

data segment

  hello db "hello world!", "$"  ;必须要"$",表示显示结束,否则,就会一直显示到遇到$

data ends

code segment

  assume cs: code, ds: data

start:

  mov ax, data

  mov ds, ax

  lea dx, hello

  mov ah, 09h

  int 21h

  mov ah, 4ch   ;dos中断调用,使用ah做中断号

  int 21h

code ends

end start    

没用到pop, push之类的就不用堆栈

中断程序使用系统堆栈,这个不用管的

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
本人女,分手后我还想他,偷看过两次他的QQ资
当我想哭的时候该怎么办?
上海海烟可以加盟吗
如图所示体温计的分度值为________℃,所测的
玩王者荣耀结算时候,老是闪退出来
求此民间帅哥= = 资料 !!!!!!!!!!
我很想给我女朋友打电话!可是我们已经分手了
牙缝有黑斑,能用什么牙膏清洗吗?
神奇魔术变色杯
金梦圆女子美颜养生会所地址在什么地方,想过
--How long are you staying? ---I don't kno
我在横历六约怎么去西丽动物园?
手机掉水里还能用吗?
上班为了一件小事!被女生说了好久感觉她,是
跪求这样一个软件???
推荐资讯
有关KAPPA的问题
蚌埠有卖绿色塑钢料吗?
如图,在梯形ABCD中,AD∥BC,AB=DC,点E、F
hadoop 可以两个集群之间做到每个节点之间一
flash cs3 图层多的话,第一帧的代码是什么?
Backdoor.Generic.215962 这个病毒怎么查杀?
董卓有个将叫索什么来着
用EMS从上海向甘肃天水邮寄包裹最少需要几天
Yoube hungry after the long walkHelp yours
轻卡质量汽车口号大全,各大汽车品牌口号
QQ自由幻想刺客加点问题?
我是农历1986年三月初八出生的。想占卜一下我
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?