在《汇编语言》的P237页,书中提供了一种子程序保存数据的方式:
do0: jmp short do0start
db "over flow!"
do0start: mov ax,cs
mov ds,ax
mov si,202h
............
............
其中si是指向字符串起始地址的,它的值是这样确定的:
do0这段代码将被拷贝到0:200处,而jmp这一条指令占2个byte,所以字符串的起始地址为200h+2=202h。
这种方式存在一个问题:
如果我事...


- [gocker] 我认为CX应给18H(24),而不是17H(23) 自动方法有,而且不麻烦!CX-5 ht 02/01 02:18
- [mouse] 真牛,我还卡在课设一呢,哎,还的赶紧努力啊! 12/25 11:59
- [游客] 牛 11/26 12:21
- [sunshine] 很巧妙的方法,支持一下 11/24 11:06
- [游客] 功能实现得很好啊! 加油,坚持 11/09 18:52
- [Wednesday] 我觉得只有把执行权交给操作系统处理才能解除吧! 11/09 17:41
- [Wednesday] 继续研究! 得出结论大家交流阿! 11/09 17:39
- [Wednesday] 收获不小吧,哈哈,实现得很好,多交流阿! 11/09 17:28
- [Wednesday] 功能实现! 感觉不错吧! 11/09 17:07
- [happy] 嗯,多多总结! 10/28 01:13
[2007-11-23 20:09]
方便代码重定位的数据定位方式
阅读全文 |
评论次数(1) |
浏览次数(1117) |
所属类型(默认类型)
[2007-11-21 16:34] 学汇编
转载
为什么要学习汇编呢?现在不是大多数用C编写的了吗?是的,目前嵌入式软件大多数都是用C开发的。其实学习汇编,是为了更好了解CPU的处理,这个只是为了了解,为了更深入的了解,而不是用它来开发大部份的应用。当然它也是有用的地方,比如BOOTLOADER这样的程序,没有汇编,是不可能完成的。还有那些有特殊的指令,没有汇编也是不可能写得出来的。目前,我学习汇编,就是为了写BOOTLOADER。我也没有为了全部去学习它,而去学习,而是拿BOOTLOADER的源程序出来,从上面了解汇编,看懂别人的BOOTLOADER,或者能修改它的汇编,就算学习完成,而不必要每条指令都去死记它,去了解它。只要BOO...
为什么要学习汇编呢?现在不是大多数用C编写的了吗?是的,目前嵌入式软件大多数都是用C开发的。其实学习汇编,是为了更好了解CPU的处理,这个只是为了了解,为了更深入的了解,而不是用它来开发大部份的应用。当然它也是有用的地方,比如BOOTLOADER这样的程序,没有汇编,是不可能完成的。还有那些有特殊的指令,没有汇编也是不可能写得出来的。目前,我学习汇编,就是为了写BOOTLOADER。我也没有为了全部去学习它,而去学习,而是拿BOOTLOADER的源程序出来,从上面了解汇编,看懂别人的BOOTLOADER,或者能修改它的汇编,就算学习完成,而不必要每条指令都去死记它,去了解它。只要BOO...
阅读全文 |
评论次数(0) |
浏览次数(686) |
所属类型(默认类型)
[2007-10-12 16:11] [转载]《汇编语言》勘误建议
勘误人: xiaochun_ahut 时间: 2007-09-14 17:05:35
页码: 33 行: 2
错误: zenqing提出的关于的33页的错误不对 更正: 原文是对的
附言: mov ax,123 才对应机器码 B8 23 01
勘误人: wangxianggen 时间: 2007-04-28 08:52:44
页码: 222 行: -2
错误: ;设置df=0,正向传送 更正: ;设置df=1,逆向传送
附言: std指令
勘误人: wangxianggen 时间: 2007-04-28 08:48...
页码: 33 行: 2
错误: zenqing提出的关于的33页的错误不对 更正: 原文是对的
附言: mov ax,123 才对应机器码 B8 23 01
勘误人: wangxianggen 时间: 2007-04-28 08:52:44
页码: 222 行: -2
错误: ;设置df=0,正向传送 更正: ;设置df=1,逆向传送
附言: std指令
勘误人: wangxianggen 时间: 2007-04-28 08:48...
阅读全文 |
评论次数(1) |
浏览次数(450) |
所属类型(默认类型)
[2007-10-10 20:08]
汇编编程心得---容易出错的几点
1.时刻注意你要操作的目标数据(内存中的数据)的大小和你使用的操作容器(寄存器)的大小是否一致,比如要操作的数据都是一个字节的,就注意应该用dx,还是dl。如果习惯上喜欢一概用dx,可能会导致内存附近位置的数据被覆盖。
2.另外,对于处理数据的ds:[bx]方式,如
s: mov ds:[bx],dx
add bx,2
........
loop s
在循环中应注意bx的递增或递减大小,如果处理字节,比如用dl,循环中就加或减1;如果处理字,比如用dx,就加或减2。留意这个一致性。
3.在8086上,ss和sp都是16位的,栈所处理数据的最小单位...
2.另外,对于处理数据的ds:[bx]方式,如
s: mov ds:[bx],dx
add bx,2
........
loop s
在循环中应注意bx的递增或递减大小,如果处理字节,比如用dl,循环中就加或减1;如果处理字,比如用dx,就加或减2。留意这个一致性。
3.在8086上,ss和sp都是16位的,栈所处理数据的最小单位...
阅读全文 |
评论次数(2) |
浏览次数(882) |
所属类型(默认类型)
页码数(1):
1