![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 15:20 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行 |
| 网络日志(Blog) » 【Redtek】 个人网志(学习笔记) |
| 可打印版本 29,477 / 130 |
| 第16楼 redtek | 发表于 2006-12-11 07:27 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
electronixtar兄来杯茶~~~
照着书看简直是天书,无奈还得啃下去,哈哈…… |
|
| 第17楼 redtek | 发表于 2006-12-11 22:26 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
一个可能存在危险的汇编工具 除了《轻松汇编》的汇编语言编辑工具,又看到了一个名为《至死汇编》的工具。
“这是一款全中文环境的傻瓜型DOS汇编语言辅助开发工具”……它是这样描绘其功能的。 然而,在找到数个可以下载《至死汇编》的网站后,却看到了一系列神奇的事件: 以上贴子内容来源: http://www.blogcn.com.cn/user1/525/archives/2005/11376.shtml 虽不能确定以上评论是真实事件还是别有用心的特殊商业竞争手段…… 但,我是不敢装它了!这数据可丢不起:) 为什么这工具软件的名字居然叫《到死汇编》,哈哈…… 装过的人气得快要死了吧?! (另:以上内容只介绍了网上对《到死汇编》的部分评价,不对其介绍的真实性负责) |
|
| 第18楼 redtek | 发表于 2006-12-11 23:12 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 领悟二进制和IP地址的关系
经常见到的存取信息的基本单位,英文为:Byte,就是“字节”。 一个字节由8位二进制数组成,其位编号自左至右为 b7~~b0。 (即,1个字节占用1个存储单元) 计算机中存储信息的基本单位是1个二进制位,简称:位,英文 bit,可用小写字母 b 表示,一位可存储一位二进制数。 (以上内容约为书上介绍基本概念) (这概念有用吗?在汇编里非常有用,几乎全是这样的数据类型) (在计算机“看来”,一切数据都是二进制信息) (那些常用的 Windows 记事本 里看到的文本或是中文信息,那是为了给我们方便阅读,能够看得懂) (而在计算机中,我们常称之为“文本文件”的内容,其实在计算机里都是二进制信息) (只不过调出来为了让我们看得懂,才通过一系列“转化”和一系统“概念”,才从二进制“翻译”成我们看得明白的内容) 32位有多长?经常听到有人说:“IP地址是32位的二进制地址”。 不过,上面的定义只是网络书上或是经常有人提及的一个概念:……32位的二进制地址。 那么这个概念能不能给它“实例”化呢? (注:以下只是个人分析,不保证个人理解和个人所说的是正确的) 例: 127.0.0.1 二进制表示这个地址: (要用 Windows Calc 计算器了,手工计算要疯掉!) 但,它并不是32位的,所以左边要被位,让它为4个8位为一组。 就象是: 128,而我给128的左边加0,变成了: 00000128,那么它也是128 ~:) 那么真实的32位IP地址:127.0.0.1 在计算机看来应该如何表示呢? 是上面这个样子,这才是真正的32位的二进制IP地址的书写。 在计算机看来,一切都是二进制信息,所以那个分隔的“点”就没有了~:) 为什么IP地址中间要有点儿?通过以上分析得出结论:那是为了让我们能够看懂和能够方便记忆,所以加上去的--人性化。 计算机可看不懂,它就认纯粹的二进制信息~:) 对了,现在想起了有的人(看操作象是高手的方式),有的人为了隐藏IP地址,它将IP地址“缩为”一串儿看上去很奇怪的数字。 这是为什么? 如:你会看到一些 http://2130706433 或是 Ping 2130706433 或是 Ftp ………… 那就让我来揭穿,或者说从底层二进制来弄明白这个数字、这种表示方法到底是什么:) 下面是我们刚才计算出来的32位的二进制的IP地址表示: 这么长,哈哈……(该不会有人问那么"Redtek"我的名字是不是也可以用二进制表示?当然能,只是到时候我都不认识自己了:) 好,最简单的办法就是将上面的32位二进制地址计算成10进制就行了,让windows的计算器算吧~:) 打开 Windows 的计算器,选择“科学型”计算方式,在二进制那里COPY上面地址,然后点“十进制”就转出来了:) 转成十进制的地址信息如下: 上面就是10进制的IP地址信息了,我们怎么验证它呢? Ping 它啊~~ 看到了,只要一Ping 它,Ping 就自动转化为我们看得懂的地址信息了。 所以, Http://2130706433 当然也能~:) 而且,当你这样操作了,你就会看到浏览器的提示栏里显示“……127.0.0.1……” ~:) 等等……你想到了什么? 这是我在写另一个网志的时候想到的……“喂……你们的网址是多秒?” ……太长了……我记不住,英文字母发音也不准…… 如果你将你公司的HTTP首地址写成上面的10进制地址,是不是读给客户听更方便更好记忆呢? 是不是你用手机或是移动设备浏览被你“编码”10进制的地址信息输入更方便呢?谁让手机输入数字比输入字母快~:) (注:无独立IP的主机无效) 以上就是个人总结的关于二进制与计算机中我们常说的IP地址的关系:) 10:04 2006-12-11 另:既然我们上面聊到了 Ping ,那么 Ping 还可以干什么呢? Ping 可以看懂10进制地址信息,那么我们让 Ping 来做翻译吧~:) 我们知道: 字母 A 的16进制是 41 ,它的10进制是 65 set /a 0x41 也可以帮我们计算出 0X41 这个16进制的10进制是 65 所以,这回我们急了!!!我们要PING 0x41 Ping 帮我们把 0x41 转成了10进制数: 65,哈哈…… Ping 也可以当计算器~:) 上面的原理还是来自于二进制信息与什么是32位的二进制IP地址的我们刚才的讨论~:) 但Redtek本人不表示上面所说就一定是正确的,很可能等汇编语言完全学完以后上面的个人认为又是一种错误~:) (另:为什么IP地址如: 127.0.0.1 这个子网的范围为什么是:0~~255呢?) ( 这是谁规定的? 为什么要这样规定? ) ( 好象没人告诉我,好象就是指定这个范围 ) 好,我们把这个弄清楚了~:) IP地址是由32位的二进制地址组成。 由上面推断证明,它是每8位一组,一共四组,每组用 “点” 来隔开,为了让我们看明白:) 上面就是四组,每组8位二进制表示的IP地址。 8个位的二进制位等于一个字节的长度, 8个位的二进制数可以最大表示(10进制无符号数): 0~~255 所以,简单认为如果有一个10进制是256,那么它就超过了8位二进制所容纳的范围了(无符号数--即没有正负之分)。 255的16进制是FF。 当我们在8位寄存器中,用Debug做如下实验: 把 100H (10进制的256)送入 8位的AL寄存器,结果溢出。 把 FFH (10进制的255)送入 8位的AL寄存器,刚好:) FFH (10进制的255)转成二进制是: 11111111 (正好占8个二进制位) 100H(10进制的256)转成二进制是:100000000 (占9个二进制位,8位寄存器可放不下) 所以,取值这是样规定了从0~~255的范围刚好合适。 那么 255.255.255.255 是多大呢? 二进制表示: 11111111111111111111111111111111 它的十进制: 4294967295 相当于: 42亿多台主机……(不过这是理论值) 那么,经常遇到什么什么溢出也是这个原因~:) [ Last edited by redtek on 2006-12-11 at 11:00 AM ] |
|
| 第19楼 redtek | 发表于 2006-12-12 02:13 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 位和地址线究其穷破
二进制位、n位地址线……这些都是什么?它们有没有用? 书上只告诉我这样的原话:“……8088……,有20位地址线,可以寻址1MB的内存……”。 (好,我们今天非得把它弄明白了不可) (书上一带而过,并没有说为什么20位地址线就可以寻址1MB内存,它凭什么能寻得,又凭什么寻不到1MB以上内存?) (这20位地址线最大寻址为什么是1MB?怎么计算出来的?) (好,我们从现在把它完全弄明白了,一直推到它的本质上~:) (……休息,休息一会儿) 第17楼从位一直推到那个IP地址,又一直推到那个IP地址的最大表示范围。 所以,我们知道二进制表示8个位的最大数(8位寄存器也可以不溢出的情况下装入),那么这个数就是十进制的255。 转成16进制是 FF (还记得修改游戏血值为什么是FF了吧?代表最大)。 转成二进制就是 11111111 (一共有8个1,哈哈) 所以,那么20位地址如何表示呢?当然是20个1啦~:) 11111111111111111111 那么这20个1(就是二进制的20位表示)的10进制是多大呢? 1048575 (为什么要表示成10进制呢?二进制容易看晕了,不方便用windows计算器计算) 好,20位的10进制得出了是:1048575 (书上说20位地址线最大寻址为1MB内存) 好,我们再看1MB的内存计算方法: 1024个字节=1KB 1024KB=1MB 所以,1024KB是1MB,那么1MB就是1024*1024=1048576个字节 1MB是1048576个字节,那么为什么刚才计算20位最大数表示的10进制是1048575呢?它两个数可是相差1啊! 再看一下内存,内存的启址地址是从0开始的,一直到20位地址可寻范围的1048575,当然有1048576个地址表示。 而我们1024*1024所得到的内存1MB的计数,可是从1到1048576的,它们起始数不一样,当然相差1。 所以,20位地址线最大可访问内存为1MB。 [ Last edited by redtek on 2006-12-15 at 08:23 AM ] |
|
| 第20楼 redtek | 发表于 2006-12-12 23:25 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 IBM PC 机的寻址方式与指令系统
与数据有关的寻址方式包括: 1) 立即寻址方式 2) 寄存器寻址方式 3) 直接寻址方式 4) 寄存器间接寻址方式 5) 寄存器相对寻址方式 6) 基址变址寻址方式 7) 相对基址变址寻址方式 8) 比例变址寻址方式 “ 一条指令通常由操作码域和操作数域两部分组成。 ” “ 寻址方式指的就是指令按什么方式寻找到操作数地址或操作数。 ” EA=有效地址。 在IBM PC中就是操作数地址的偏移量部分。(简称EA) “ EAX、AX、AL(通常被分为32位、16位、8位累加器),它们在乘除、十进制运算、输入输出指令中有专门用途。 ” “ 在实模式中BX、BP、SI、DI可以作为间接寻址的寄存器,用以寻址64KB以内的内存单元。 ” 1) 理解立即寻址方式
2) 理解寄存器寻址方式 例: MOV BX,AX ; 执行结果(BX)=(AX) MOV DI,5678H ; 执行结果(DI)=5678H “ 仿问普通变量时,默认选用DS段寄存器,后也可以显式地指定为ES、SS、CS(在386以上还可以为GS、FS)。” 段超越前缀的格式为: 段寄存器名: 段超越前缀的功能是明确指出本条指令所要寻址的内存单元在哪个段。 例: MOV BX,ES:MEM “ 该指令源操作数的有效地址是用变量名表示的MEM,前边使用了段超越前缀“ES:”,明确表示使用ES所指向的附加数据段中变量, 而不是默认的DS所指向的数据段。 ” 由于汇编格式不会,下面使用Debug理解寄存器寻址方式:
3) 理解直接寻址方式 “ 操作数的有效地址直接包含在指令中的寻址方式。 ” “ 有效地址存放在代码段的指令操作码之后,但操作数本身在存储器中,所以必须先求出操作数的物理地址。 ” 例: MOV AL, Debug理解上面代码:
段超越前缀Debug表示如下:(汇编表示: MOV AL,ES: )
4) 理解寄存器间接寻址方式 “ 若指令中使用的是BX、SI、DI、EAX、EBX、ECX、EDX、ESI、EDI,则缺省情况操作数在数据段。 ” 寄存器间寻址方式[BX]表示BX寄存器中是有效地址而不是操作数。 这也是寄存器间寻址方式与寄存器寻址方式在汇编格式上的区别。 例: MOV AL, 若(DS)=3000H,(BX)=78H,(30078H)=12H 则物理地址=10H*(DS)+(BX)=30078H 该指令结果是(AL)=12H Debug 理解:
5) 理解寄存器相对寻址方式 “ 操作数的有效地址是一个基址(BX,BP)或变址寄存器(SI、DI)的内容和指令中给出的一个位移量(disp)之和。” “ 对于386以上CPU,这种寻址方式允许使用任何32位通用寄存器。 ” “ 位移量可以是1个字节、1个字、1个双字(386以上)的带符号数。 ” “ 若指令中寄存器相对寻址方式使用BP、EBP、ESP,则默认与SS段寄存器配合。 ” “ 使用其他通用寄存器,则默认与DS段寄存器配合,允许使用段超越前缀。” EA=(基址<或变址>寄存器)+disp EA=(32位通用寄存器)+disp (386以上) Debug理解如下:
6) 理解基址变址寻址方式 “ 操作数的有效地址是一个基址寄存器(BX,BP)和一个变址寄存器(SI、DI)的内容之和。 ” EA=(基址寄存器)+(变址寄存器) 例: MOV AL, 执行结果: (DS:) ---> AL “ 使用这种寻址方式可以访问一维数组,其中BX存放数组起始地址的偏移量,SI存放数组元素的下标乘以元素的长度,下标从0计数。” Debug理解基址变址寻址方式:
7) 理解相对基址变址寻址方式 “ 操作数的有效地址是一个基址(BX、BP)和一个变址寄存器(SI、DI)的内容和指令中给定的一个位移量(disp)之和。” EA=(基址寄存器)+(变址寄存器)+disp 例: MOV AL,ARY 该指令可以表示为:MOV AL,ARY 或 MOV AL, ---> AL 使用Debug理解例子:
使用上面这种寻址方式可以访问形如 ARY的二维数组,下标从0开始计数。 假设数组在内存中以行的形式存放(即先存放第一行的所有元素,然后依次存第二行……),其中ARY为数组超始地址的偏移量。 基址寄存器(例BX)为某行首与数组起始地址的距离(即BX=行下标*一行占用的字节数)。 变址寄存器(例SI)为某列与所在行首的距离(即SI=列下标*元素长度),若保持BX不变而SI改变,则访问同一行所有元素。 若保持SI不变而BX改变,则可以访问同一列的所有元素。 8) 理解比例变址寻址方式 “ 这种寻址方式是80386以上的微处理器才提供的。 ” EA=(基址寄存器)+(变址寄存器)*比例因子+disp (最后一种相当于第7种寻址方式的扩充,关于模拟数组的方式非常有用) (但,如果按书 MOV EAX,ARY 就这一句话举例一带而过的讲义方式,非常怀疑这是在简单抽象介绍还是在一步一步教学!) (所以,如果不模拟并做出一个数组的较完整的操作代码出来,想必是白学了,不可能得心应手的使用和思维再扩展它的应用) (暂时放在这里,等会汇完整的数组操作代码时再回过来看) [ Last edited by redtek on 2006-12-12 at 05:40 PM ] |
|
| 第21楼 redtek | 发表于 2006-12-13 07:02 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 (热身练习~:)
显示一个字符笑脸儿: ☺
如果没有这个热身小练习估计再看下去就疯了~:) (上面小代码也可以在不生成临时文件的情况下自动“注入”Debug并自动生成文件) 上面代码是一行,执行后会在当前目录下生成一个名为 P.COM 的文件,一执行会显示一个笑脸儿~:) (上面指令无论是 Windows CMD Shell 还是 MS-DOS 纯DOS环境均可以正常执行) [ Last edited by redtek on 2006-12-12 at 06:19 PM ] |
|
| 第22楼 redtek | 发表于 2006-12-15 05:59 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 输出 256 个ASCII码~:)
Loop 为循环指令,其循计数放在CX寄存器中。 06h DOS 21中断06H号功能:为直接控置台读/写,要输出的ASCII字符送入DL寄存器中 inc 递增指令,指定寄存器+1每次。 [ Last edited by redtek on 2006-12-14 at 05:11 PM ] |
|
| 第23楼 lxmxn | 发表于 2006-12-15 08:29 |
| 版主 发帖 4,938 积分 11,386 | |
|
哈哈,就再这里跟着兄学习汇编了。比书上详细、好理解的多。呵呵~~
19楼中,这里笔误了吧? |
|
| 第24楼 namejm | 发表于 2006-12-15 09:20 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
|
哈哈,无聊如汇编都让 redtek 兄搞得让人兴味盎然,过瘾过瘾。以后论坛里如果要开讲座的话,老兄一定是在台上先泡杯花茶然后再唾沫横飞开讲的那位,哈哈。
|
|
| 第25楼 lxmxn | 发表于 2006-12-15 10:30 |
| 版主 发帖 4,938 积分 11,386 | |
|
不幸找了一个汇编的网站,去看看?http://www.aogosoft.com/ |
|
| 第26楼 redtek | 发表于 2006-12-15 21:25 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
多谢lxmxn兄,19楼的错误去掉了~:)))
http://www.aogosoft.com/ 这个汇编网站不错,收藏:) |
|
| 第27楼 redtek | 发表于 2006-12-15 21:38 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
有了namejm兄的鼓励,俺心中顿时暖流四起、真气充盈,突然间年轻了20年~:)
什么时候论坛开讲座,真盼着能一桌子酒……边喝边听namejm兄演讲~:)~ |
|
| 第28楼 GOTOmsdos | 发表于 2006-12-16 00:26 |
| 铂金会员 发帖 1,827 积分 5,154 | |
|
过来纯支持一下,偶只会操作MBR的汇编
汇编是编程语言的《易经》 |
|
| 第29楼 redtek | 发表于 2006-12-16 02:06 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
“汇编是编程语言的《易经》” GOTOmsdos兄这句话说得真是贴切至极!!!欣赏!!!
|
|
| 第30楼 lxmxn | 发表于 2006-12-16 02:27 |
| 版主 发帖 4,938 积分 11,386 | |
我生成了这个P.COM,但是不知道专门看见这个“笑脸”。运行一闪而过,根本看不见,请教兄一下~ |
|
| 上一页 1 2 3 4 5 … 9 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |