汇编语言的Call指令的问题

如图所示,其他几个寄存器的执行结果我都懂,为什么cs的值是0?他的值应该跟ds一样吧?或者原因是ds的值本身就是0?图片说明

0

1个回答

整段代码CS都是一直为0的啊,这只是当前CS为0的一个特例而已,不用在意那个CS=0
ds是data stack,即数据段的基址

1
lucas_w17
un1verses 好吧。。因为我debug的时候ds都是0b5c之类的,没想到还能是0 。。
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
汇编语言,call指令跳转
我想知道这个call指令会跳转到哪里去?这个程序不能在debug里执行,就是debug单步执行不能代表cpu实际的执行结果。call指令会跳去哪里?为什么会跳去哪里?返回在哪里? ax的结果值我知道是03hrnassume cs:codernrnstack segment rn dw 8 dup(0)rnstack endsrnrncode segmentrnstart:rn mov ax,stackrn mov ss,axrn mov sp,16rn mov ds,axrn mov ax,0rn [color=#FF0000] call word ptr ds:[0eh][/color]rn inc axrn inc axrn inc axrn mov ax,4c00hrn int 21hrnrncode endsrnend start
linux汇编语言的call指令
学习系统调用,编了一个程序rnvoid main()rnrn write(1, "hello\n", 6);rn exit(0);rnrn下面是生成的汇编代码rn .file "syscall.c"rn .section .rodatarn.LC0:rn .string "hello\n"rn .textrn.globl mainrn .type main, @functionrnmain:rn.LFB0:rn .cfi_startprocrn pushq %rbprn .cfi_def_cfa_offset 16rn movq %rsp, %rbprn .cfi_offset 6, -16rn .cfi_def_cfa_register 6rn movl $6, %edxrn movl $.LC0, %esirn movl $1, %edirn movl $0, %eaxrn call write [color=#FF0000]//请问这句调用的write,具体是怎么实现的?书里面介绍的,是用int $0x80这个陷阱来实现的系统调用,这个write对int $0x80封装了么?去哪里找?[/color]rn movl $0, %edirn call exit /[color=#FF0000]/这句也一样[/color]rn .cfi_endprocrn.LFE0:rn .size main, .-mainrn .ident "GCC: (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5"rn .section .note.GNU-stack,"",@progbitsrnrn希望会的朋友指点!谢谢了!
汇编语言之CALL和RET指令
欢迎关注博主的公众号:薛定谔的小鱼儿1.ret和retf指令ret指令用栈中的数据,修改IP内容,从而实现近转移retf指令用栈中数据,修改CS和IP的内容,从而实现远转移CPU执行ret指令相当于:pop IPCPU执行retf指令相当于:pop IP                                      pop CS...
汇编语言 第十章 CALL和RET指令
10.1 ret和retf ret指令用栈中的数据更改IP的内容,从而实现近转移 进行的过程:pop IP (IP) = ((SS * 16) + (SP)) (SP) = (SP) + 2 retf指令用栈中的数据更改CS和IP的内容,从而实现远转移 执行过程:1.pop IP,2.pop CS (IP) = ((SS) * 16 + (SP)) (SP) = (SP) + 2...
王爽的汇编语言call指令的一个小问题
在测试点10.2中rn题目是这样的:rnrn内存地址 机器码 汇编指令rn1000:0 b8 00 00 mov ax,0rn1000:3 e8 01 00 call srn1000:6 40 inc axrn1000:7 58 s:pop axrnrn[color=#FF0000]问:程序执行完后,ax的值是多少?[/color]rnrncall指令是 将当前ip或者ip和cs压入栈中,之后再跳转到标记处 这个我知道rnrn但是为什么答案是[color=#FF0000]ax=6[/color] 我就不懂了。。请各位高手指点指点rnrnrn
汇编语言入门:CALL和RET指令(一)
call、ret指令,本质上还是汇编『跳转指令』,它们都用于修改IP,或同时修改CS和IP;这两个指令经常被用来实现子程序的设计 ret指令和retf指令 ret指令用栈中的数据,修改IP的内容,从而实现近转移 retf指令用栈的数据,修改CS和IP的内容,从而实现远转移 CPU执行ret指令时,相当于进行: pop IP CPU执行retf指令时,相当于进行: pop ...
jmp和call指令的问题?
汇编程序中,jmp和call指令后的地址为何可以通过将下一条指令的地址加上本条jmp和call指令后的地址的机器码获得?例如:rn:bff816e6 e859edffff call bff80444rn:bff816eb c3 retrnbff816eb + ffffed59 = bff80444
Call 指令问题
DWORD __stdcall AttachStart() rn rnasm rn rnCALL @a // 编译不能通过 rn // JZ @a 却能通过编译 rn@a: rnPOP EAX rnSUB EAX, 5 rn rnrnreturn 1; rn
CALL指令的问题
rnmain procrnrncall mysubrnrnmov eax,ebxrnrnmysub procrnrnmov eax,edxrnrnretrnrnmysub endprnrn我的疑问是上面的代码我用OD按F8单步执行call mysub指令,为啥跳不到mysub呢?按F8后程序走到了mov,eax,ebx。rn
call指令和ret指令
参考文章: http://www.cppblog.com/luqingfei/archive/2010/08/04/122170.aspx
call指令
call指令的作用是把call指令的下一条指令的IP压入栈
call指令和ret指令(1001)
本文为《汇编语言程序设计》1001小节例程。点击链接…进课程主页。 用ret返回 assume cs:codesg, ss:stack stack segment db 16 dup (0) stack ends codesg segment mov ax,4c00h int 21h sta...
汇编关于call指令的问题
[code=Assembly]assume cs:codernstack segmentrn dw 8 dup (0)rnstack endsrncode segmentrnstart: mov ax,stackrn mov ss,axrn mov sp,16rn mov ds,axrn mov ax,0rn call word ptr ds:[0eh]rn inc axrn inc axrn inc axrn mov ax,4c00hrn int 21hrncode endsrnend start[/code]rn为什么我debug时,用t命令到call 指令那句,之后,跳转的地址不是预想的,ax结果也不对,而我用g命令直接跳到mov ax,4c00h那句,ax的结果就是对的
汇编语言指令问题? ? ?
mov eax,22hrn mov ebx,45hrn shld eax,ebx,32rn 执行后发现eax的值还是22h,怎么回事。rn 移位是8、16的话eax都会改变的,怎么32就不变了呢?
汇编语言指令集 汇编语言指令
汇编语言指令集收集了几乎所有的汇编语言的指令,并对其进行了分类,方便查询
汇编语言指令
汇编指令大全,详细介绍了一些汇编语言里的常用指令
汇编语言和指令
SDK(软件工具包)Software Development Kit一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。 API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API而使操作系统去执行应用程序的命令 win32编程:利用Wi...
汇编语言jmp和call的区别
汇编语言jmp和call的区别
call指令的疑问???????
push 5rnpush 6rncall lpokok rn//开始的时候压了5,6入栽,这里的call lpokok执行后,还需要我自己POP弹出平衡堆栽吗?
调用指令(Call)
调用指令分为近(near)调用和远(far)调用。 如果被调用子程序的属性是近的,那么,CALL指令将产生一个近调用,它把该指令之后地址的偏移量(用一个字来表示的)压栈,把被调用子程序入口地址的偏移量送给指令指针寄存器IP即可实现执行程序的转移。 [color=red]注意:因为将下一条指令地址入栈了,所以根据ebp访问第一参数时地址要增加四个字节[/color] 如果被调用子程...
汇编:call指令
  1. call 标号,  (机器码中包含了位移)   执行call指令,相当于执行下面两条指令   push ip   jmp near ptr 标号   2. call far ptr 标号,  (机器码中包含转移的目的地址)     push cs(call指令的下一条指令的cs地址)     push ip(call指令的下一条指令的ip地址)     jmp fa...
第十章 CALL和RET指令
本博文系列参考自<<汇编语言>>第三版,作者:王爽 call与ret都是转移指令,它们可以改变IP值,或者同时改变CS与IP的值,往往在程序中使用它们进行子程序模块的设计。 1 指令介绍 在介绍call和ret指令之前,我们先总结以下前两章的学习思路。这个思路同样可以扩展到第10章。 第八章 数据处理的两个问题:数据的位置和长度。 mov ax,bx | ...
call和ret指令用法
call和ret都是转移指令,它们都可以修改IP或者同时修改CS:IP,它们被共同用来实现子程序的设计 ret和retf区别 ret是用栈中的数据修改IP的值,实现近转移(段内转移) retf是用栈中的数据修改cs:IP的值,实现远转移(段间转移) 1cpu执行ret时,执行以下操作 (IP)=((ss)*16+(sp)) (sp)=(sp)+2 相当于pop ip 2c
关于指令CALL AX
请教一下这条指令的意思是什么rn执行后。堆栈有什么变化
汇编--call和ret指令
CALL和RET指令: RET指令 ret指令:用栈中的数据修改IP,从而实现近转移。使用ret时,相当于pop IP。 retf指令:用栈中的数据修改CS和IP,从而实现远转移。相当于 pop ip pop cs。 CALL指令 根据位移进行的转移:CALL 标号 。 这个指令会将当前IP内的值压入栈,然后再转移到标号处进行指令。相当于 push ip jmp near ptr...
汇编call指令疑问
[img=https://img-bbs.csdn.net/upload/201405/23/1400851754_422493.jpg][/img]rn[img=https://img-bbs.csdn.net/upload/201405/23/1400851775_44439.png][/img]rn运行call [000E],把当前ip压入栈中,然后执行使ip指向ds:[000E],ds:[000E]内容为 11 即执行1714:0011这句话,可是为什么运行完后ip变成了3302rnrnrnassume cs:codernstack segmentrndw 8 dup(0)rnstack endsrncode segmentrnstart:rnmov ax,stackrnmov ss,axrnmov sp ,16rnmov ds,axrnmov ax,0h rncall word ptr ds:[0Eh]rninc axrninc axrninc axrnrnmov ax,4c00hrnint 21hrncode endsrnend start
call和ret指令
call调用print函数.但没有正常退出 ** call和ret指令的本质
总结:汇编语言(第3版)--第十章 CALL 和 RET 指令
第十章  CALL 和 RET 指令 call 和 ret 指令都是转移指令,它们都修改 IP ,或同时修改 CS 和 IP 。它们经常被共同用来实现子程序的设计。 ret 和 retf :ret 指令用栈中的数据,修改 IP 的内容,从而实现近转移;retf 指令用栈中的数据,修改 CS 和 IP 的内容,从而实现远转移。 call 指令 :CPU 执行 call 指令是,进行两步操作,首...
【王爽-汇编语言】call s指令的转移范围
P180页提到call s的IP变化量为[-32768~~32767]rn但我测试发现IP变化量可以超过32767,达到65000,程序如下:rn[code=Assembly]assume cs:codernrncode segmentrnrn start:rn mov ax,0rn call srn db 65000 dup (17)rn rn s:rn pop axrn rn mov ax,4c00Hrn int 21Hrn rncode endsrnend start[/code]rnrndebug如下:rn0B53:0000 B80000 MOV AX,0000rn0B53:0003 E8E8FD CALL FDEErn0B53:0006 1111 ADC [BX+DI],DXrn:rn:rn:rn:rn0B53:FDED 1111 ADC [BX+DI],DXrn0B53:FDEE 58 S:POP AXrn上述程序中,call s的二进制代码为“E8E8FD",16位位移为“FDE8”,即“65000”,为什么这里位移能超过[-32768~~32767]的限制呢?rn请大家帮忙指点下,谢谢!rnrn
函数调用时call指令和ret指令
  函数调用一般是通过call指令和ret指令相互配合使用来实现的,当函数运行到call指令时,call指令会做两件事:1,将当前的ip压入栈中;2,跳转到call指令后被调用的函数。 当被调用函数运行完毕之后,通过ret指令返回到函数中,ret指令也会做两件事:1,将之前压入栈中的ip出栈,2,跳转到ip所指向的地址,函数开始运行call指令的下一步指令。 除此之外,call指令还有以下用...
关于CALL指令,IP入栈的问题
如果程序中不自己创建一个栈,执行CALL指令的时候,IP一样会入栈,执行完毕一样能用ret指令返回。请问,IP被存到哪个栈里去了?莫非自动创建了一个?
关于嵌入汇编CALL指令的问题
DWORD __stdcall AttachStart()rnrn asmrn rn CALL @a // 编译不能通过rn // JZ @a 却能通过编译 rn @a:rn POP EAX rn SUB EAX, 5rn rnrn return 1;rn
第10章 CALL和RET指令
10.1  ret和retf ret指令用栈中的数据,修改ip的内容,从而实现近转移; retf指令用栈中的数据,修改cs和ip的内容,从而实现远转移。 10.2  call指令 call是段内转移时,将ip压入栈,执行完后,利用ret返回到当前分支处继续向下执行。 call是段间转移时,将cs和ip压入栈,执行完后
《汇编语言》学习(十)call and ret
《汇编语言》第十章主要介绍CALL和RET指令的原理。本文我将用一张知识图谱总结它的知识点,然后重点展示它的各个课后习题。 1,知识图谱     CALL和RET是为函数调用和函数返回准备的一对汇编指令。他们都借助“栈空间”来存储或获取转移的目标地址。 2,习题 检测点10.1 assume cs:code stack segment db 16 dup(0) sta
汇编中的call和ret指令
call和ret指令都是转移指令,它们都修改偏移地址或同时修改段地址和偏移地址。ret指令用栈中的数据,修改偏移地址,从而实现近转移。call可以通过位移和目的地址进行转移。下面来通过汇编代码学习一下call和ret指令的配合使用。 下面来看一下程序刚加载时栈的情况,对应16个00 程序对应的...
day18.EIP、CALL、RET指令用法
第18节: EIP、CALL、RET指令用法前面章节我们已经学过了一些指令了如:add、push、pop等。这节我们学习一下EIP、CALL、RET指令1、jmp指令:eip这个寄存器为什么不叫通用寄存器,原因它里面的值,就是我们CPU下一次要执行的地址,大家前面学过的mov指令,如果要改一个通用寄存器的的值,就用如:mov eax,1,当我们在反汇编窗口写完这条指令,按F8执行完后 ,EAX的值...
关于CAll指令的一些疑问
call 后跟的是相对地址,但是我用vc反汇编看了看,发现call后面跳转的地址不是子程序的地址,而是jmp 子程序地址的 指令地址,这是怎么回事?rn00034483: jmp 00034682rn00034682:这是子程序的地址rnrn00034888: call 00034483rnrn每次函数调用都会是这种情况,请大家帮忙。rn
call、ret、retf 指令详解
call、ret、retf指令详解本文讲解针对NASM编译器,8086处理器的call、ret、retf 指令。对于其他编译器和保护模式下的80x86,指令用法类似,可以作为参考。
CALL和RET指令---汇编学习笔记
CALL和RET指令 call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP。它们经常被共同用来实现子程序的设计。 10.1 ret和retf ret指令用栈中的数据,修改IP的内容,从而实现近转移; retf指令用栈中的数据,修改CS和IP的内容,从而实现远转移。 CPU执行ret指令时,进行下面2步操作(相当于pop IP): (IP)=((ss)∗16+...