鱼C论坛

 找回密码
 立即注册
查看: 3612|回复: 6

如何用masm向特定地址(如cs:ip 1000:0)写入指令(如mov ax,2)

[复制链接]
发表于 2014-8-21 19:40:34 | 显示全部楼层 |阅读模式
9鱼币
我记得小甲鱼老师在视频里说过,一时忘了在哪个视频里,找不到,他说过可以用jmp,
不用dos,dos我知道是a指令就可以了
    但是还是有点不懂,求高人指点

最佳答案

查看完整内容

不知道你说的是不是这个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-21 19:40:35 | 显示全部楼层
assume cs:code
code segment
start:
        mov ax,2000h
        mov ds,ax
        mov bx,0h
        mov ax,cs
        mov es,ax
        mov si,offset s
        mov cx,offset s1-offset s
        
s0: mov ax,cs:[si+bx]
        mov [bx],ax
        add bx,2
        loop s0
        jmp short s1
s:  mov ax,2
        mov bx,3
s1: nop
        mov ax,4c00h
        int 21h
code ends
end start
不知道你说的是不是这个。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-23 20:46:02 | 显示全部楼层
流行语 发表于 2014-8-22 13:36
不知道你说的是不是这个。

多谢高手给力哈
1.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-23 20:48:39 | 显示全部楼层
以下是我看了程序之后的一点注解,请各位大神指导一下对错
assume cs:code
code segment
start:
        mov ax,2000h     ;ax =2000
        mov ds,ax        ;ds=2000(段地址)
        mov bx,0h         ;bx=0
        mov ax,cs        ;ax=cs (当前程序段地址)
        mov es,ax        ;es=cs(将程序段地址存入附加段中)
        mov si,offset s     ;(将si的值等于我们所要存储指令s的偏移地址中)
        mov cx,offset s1-offset s  ;(cx=循环次数,等于所需存储的指令的字节/字所需的内存空间大小)   

s0: mov ax,cs:[si+bx]         ;(将cs:[si+bx]中的数据存入ax中,即将所需要存储的数据存入20000H,20002H)
        mov [bx],ax           ;(bx=程序段偏移地址)
        add bx,2             ;(bx=bx+2,存储下一个数据[si+bx]做准备)
        loop s0              ;(循环跳转到s0,因为每次只能存储2字节,所以,循环cx次,cx为16位(2字节))
        jmp short s1         ;(跳转到s1,跳过我们所需要存储的指令,因为不执行)
s:  mov ax,2                ;(这里我有个疑问,mov指令是2字节,好像有的命令需要1字节或3字节这边的bx=bx+2不就有点小问题了?)
        mov bx,3
s1: nop                     ;(无操作,主要是为了offset s1-offset s)
        mov ax,4c00h        ;(中断类型为ah=4c)
        int 21h            ;(调用21号中断)
code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-23 22:11:25 | 显示全部楼层
你还是没有分析数据和命令的概念。在计算机中不管什么都是用1,0来存储的,mov ax,2在计算机中也都是数据,你现在只是从偏移地址s处开始复制数据到2000:0处。把它处理成几个字节只是把计算机把它当成命令来用时,计算机自己会处理的、
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-24 10:41:22 | 显示全部楼层
流行语 发表于 2014-8-23 22:11
你还是没有分析数据和命令的概念。在计算机中不管什么都是用1,0来存储的,mov ax,2在计算机中也都是数据, ...

我昨天后面才想通的,谢谢提醒
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-24 22:11:33 | 显示全部楼层
都是有才的人
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-29 11:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表