❶ 汇编,下面的程序执行后,ax中的数值为多少。
call word ptr ds:[0eh] 执行时分两步 1 把ip压入栈中2 jmp word ptr ds:[0eh]用 ds:[0eh] 单元内容修改ip 当执行call 指令时ip已经装入了 第一条inc ax的指令的地址,所以在步骤1中压入的就是第一条inc ax的指令的地址。在前面mov ax,stack mov ss,ax mov sp,16 mov ds,ax 显然ds ss 是同一段,栈顶指针在16也就是10h,压入ip(第一条inc ax的指令的地址,16位偏移地址)后,(sp)-2 = 0eh,而此时要转去以ds:[0eh]单元内容为地址的地方执行,这个地址恰恰是第一条inc ax的指令的地址((ds)=(ss),(sp)=0eh),所以当call word ptr ds:[0eh] 指令执行后cpu 将继续向下执行call word ptr ds:[0eh]的下一条指令之前(ax) = 0 三个inc ax 后 等于3
❷ mov sp,10h mov ax,0123h mov ds:[0],ax call word ptr ds:[0] 执行后(ip)=0123h 为啥啊 知道的详谈
movsp,10h;建立一个16字节栈,从0~~f,且sp指向ss:10h,别管ss在哪里题目不需要,如果不明白sp指10h,复习下栈。movax,0123h;movds:[0],ax;在ds:[0]内存设为123hcallwordptrds:[0];第一步:puship,ip值存入栈,sp=sp-2,故sp=16-2=14=0EH第二部:jmpwordptrds:[0],ip=123h不懂的话复习jmp转移地址在内存中的指令
❸ 汇编add byte ptr ds:[eax],al是什么意思
汇编add byte ptr ds:[eax],al的意思是将AL的内容以字节的形式加到内存数据段偏移地址为eax所指向的字节单元原内容中。
❹ 一个简单的汇编问题 call word ptr…
ax里其实就是0h那么ds里也是0call的其实就是 0000:000eh这个应该是个中断地址吧
❺ MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]什么意思
DWORD PTR ES:[EDI],将ES:[EDI]这个内存强制转换为dword双字类型,PTR就是转换符,DWORD为双专字类型,在汇编中属有BYTE,WORD,DWORD几种变量类型,分别对应1,2,4个字节。整个语句的意思就是把DWORD PTR DS:[ESI】内存单元的值传送到DWORD PTR ES:[EDI]单元保存,因为内存单元一般是2个字节的,这里强制转换为4个字节!MOV 就是传送子令
❻ call dword ptr 内存单元地址
因为mov word ptr ds:[2],0 高两字节置0所以CS=0mov ds:[0],ax相当于把低两字节置ax的值,即123HCALL调用后IP就为ds:[0]CS就为ds:[2]
❼ 汇编call指令:
问题在于 没弄清楚 1.call指令2.dword,word。两段代码差别在于第一段的call后面是word ptr ds:[0],而第二段是dword。首先call会把返回地址压栈,导致栈顶指针sp减小,减少量由地址长度定。然后第一段代码压的是word,16位的地址,于是sp-2,第二段dword,32位地址故sp-4。
❽ 汇编语言call指令的问题
不知道你从哪里弄来的代码,这段代码根本不可能运行,运行也是死机,这应该是什么代码中间的某一段,而且不是顺序拿来的,你看那个s:,有地方用到了吗?没有。call word ptr ds:[0eh] 就是调用堆栈栈顶下来第二的位置,那个位置是 0,也就是相当于 call 0,会出现什么结果,看你系统的强壮程度了。所以你看不明白是正常的,如果看明白了,那才有问题了。
❾ 汇编call 指令
callwordptr?[?]是段内调用,只是先把当前指令的下一条指令的ip压栈,然后将?[?]下的内容给ip,然后继续执行.在压栈时是sp=sp-2,ss:[sp]=压栈的ip值.calldwordptr?[?]是段间调用,只是先把当前的cs压栈,然后将指令的下一条指令的ip压栈,然后将?[?]下的内容给ip,?[?+2]的内容给cs,然后继续执行.这里是sp=sp-2;ss:[sp]=压栈的cs,然后sp=sp-2;ss:[sp]=压栈的ip.希望对你有用.