社区
汇编语言
帖子详情
8086汇编下如何得到当前的ip值
benu
2004-12-25 03:57:43
也就是说,我在编写汇编的时候,如何知道从代码段开始到当前指令有多少个字节。我想ip的值应该就是吧,可不知怎么获得。
...全文
600
18
打赏
收藏
8086汇编下如何得到当前的ip值
也就是说,我在编写汇编的时候,如何知道从代码段开始到当前指令有多少个字节。我想ip的值应该就是吧,可不知怎么获得。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
benu
2005-01-07
打赏
举报
回复
该结帖了,多谢大家。
总结:
1。初雪的方式是正确的,但是多减了个1
2。jim138的方式也是正确的
3。$ $$ 在这题中没有用。
多谢大家
jim138
2004-12-30
打赏
举报
回复
CX应为要移动代码的字节数.
jim138
2004-12-30
打赏
举报
回复
assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,d-code
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
d:
mov ax,4c00h
int 21h
code ends
end
xemean
2004-12-30
打赏
举报
回复
在NASM里(MASM好象也有)
$ 表示当前地址
$$表示程序开始地址
比如:
codestart:
...
...
label:
mov eax,label-codestart ; 也相当于 mov eax,$-$$
...
...
dd $-$$ ; 从代码开始到当前的大小
这是编译器自己的规则
VxD1
2004-12-28
打赏
举报
回复
唉,太可惜了,没标准答案,也没个高手来给个非常正确答案
benu
2004-12-26
打赏
举报
回复
$-$$ ??? 是什么意思?
呵呵,我也不知道标准答案是什么。
VxD1
2004-12-26
打赏
举报
回复
assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,offset d-offset code-1
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
d:mov ax,4c00h
int 21h
code ends
end
不知道这样对不对
Allen
2004-12-26
打赏
举报
回复
上面说错了,是20:0处
Allen
2004-12-26
打赏
举报
回复
没怎么看清程序,不过CX应该是计数,如果你的确是移"mov ax,4c00h"的话,那么就是这个指令的字节长度。并且,题目和程序有矛盾,从程序上看是"复制到内容200:0处"
I like dos virii ;-)
kokblack
2004-12-26
打赏
举报
回复
嗯,有意思,我kK :)
xemean
2004-12-26
打赏
举报
回复
$-$$
VxD1
2004-12-26
打赏
举报
回复
如果是对的那就打分吧,我想凑颗星星
VxD1
2004-12-26
打赏
举报
回复
真的吗?我的答案是标准答案吗?
benu
2004-12-26
打赏
举报
回复
1。复制到20:0处和复制到0:200处是一样的吧。程序中的写法只是让偏移地址从0开始计算,如果将段地址设为0,那么偏移地址就是从200开始了,这个问题不是错误;
2。要复制的不是mov ax,4c00h这条指令的语句,而是从代码段开始到这条语句直接的所有指令
3。因此,问题的关键就是怎么求出2中所说的语句段的长度,初雪的解决方法是正确的,多谢
benu
2004-12-25
打赏
举报
回复
----------------------------------------
一般病毒的做法是:
call l_next
l_next:
pop xx ; 这时 xx 中就是 l_next 处的指令的地址了.
; 不过, 据说凭这两个指令, 你的代码也可能被认定是病毒的
----------------------------------------
我以前看过说这是取得当前pc值的唯一办法,把这当成病毒那不是打击面有点广了?呵呵
可能我对我原来的问题描述不清楚或者是理解有误,我还是把原题写出来吧。
题:
下面的程序的功能是将"mov ax,4c00h"之前的指令复制到内容0:200处,补全程序
assume cs:code
code segment
mov ax,cs
mov ds,ax
mov ax,0020h
mov es,ax
mov bx,0
mov cx,____
s:mov al,[bx]
mov es:[bx],al
inc bx
loop s
mov ax,4c00h
int 21h
code ends
end
呵呵,打了原题,我才发现我原来的理解有误,找ip值是不对的。可我还是不知到上面那题怎么做,请教大家。
benu
2004-12-25
打赏
举报
回复
我刚刚看,还没有调用子程序,呵呵。
就是从入口地址开始,连续执行,也没有超过一个段的长度。
这种情况下怎么求?
另外,说到子程序,那么,子程序中求当前执行语句到该子程序所在段地址的字节数怎么求? 也是偏移吗?
clumsy
2004-12-25
打赏
举报
回复
一般病毒的做法是:
call l_next
l_next:
pop xx ; 这时 xx 中就是 l_next 处的指令的地址了.
; 不过, 据说凭这两个指令, 你的代码也可能被认定是病毒的
kokblack
2004-12-25
打赏
举报
回复
这也不一定吧,如果调用子程序的话,IP的变化就不是连续的啦!
8086
汇编
语言精华笔记总结~
汇编
语言笔记总结 目录
汇编
语言笔记总结第一章
汇编
语言的基础知识1、计算机系统概述2、
汇编
语言介绍3、数据表示4、
8086
微处理器1、通用寄存器2、标志寄存器FLAGS3、指令指针
IP
4、段寄存器5、
8086
寻址方式1、指令的组成2、
8086
的机器代码格式3、立即数寻址方式4、存储器寻址方式5、寻址方式的多种表示方式6、各种操作数的表达第二章
8086
指令系统1、数据传送类指令1、传送指令MOV2、交换指令XCHG3、换码指令XLAT4、堆栈操作指令PUSH、POP5、标志传送指令6、标志位操作指令7、地址
配置
8086
汇编
环境
终于放假了,花了大约一星期的时间来学习王爽老师的《
汇编
语言》一书,以此提升自己对底层知识的理解,当然,阅读的过程是择重进行的,一些内容不敢说完全掌握。 由于王爽老师的这本书时间比较久了,本文就介绍如何使用dosbox配置
8086
汇编
学习环境 本人的环境:maxOS Catalina 10.15.7 当然了如果是学习
汇编
现有机器的性能是绝对够的 下载Dosbox 首先搜索dosbox,去官网下一个匹配版本: https://www.dosbox.com/ 由于是dos系统模拟器,所以只有11MB,安装过程
8086
汇编
指令全集
原帖地址 http://blog.sina.com.cn/s/blog_71899d520102vfi5.html
8086
汇编
指令全集 学习
汇编
语言,最关键的就在于
汇编
指令集的掌握以及计算机工作方式的理解,以下是80X86
汇编
过程中经常用到的一些
汇编
指令。 从功能分类上来说,一共可分为 一、 数据传送指令:MOV、XCHG、LEA、LDS、LES、PUSH、POP、PUSHF
实现
8086
汇编
编译器(四)——生成可执行程序
如何实现简单的
8086
汇编
语言编译器
8086
汇编
语言-指令参考手册
微处理器硬件基础 微处理器外部结构 微处理器内部结构 微处理器功能结构 指令默认地址 微处理器状态字PSW 附:ASCII码表 数据传送类指令 通用传送指令 MOV DST,SRC 将某寻址方式指定的源操作数传送到某寻址方式指定的目的操作数中去。 注意: 立即数不能送给段SEG; 两个存储单元之间不能直接操作; 两个段REG之间不能互传数据; 双操作数指令类型必须匹配(立即数【由...
汇编语言
21,458
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章