![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-08-07 16:19 |
共 48,041 主题排行 / 350,128 发帖 / 今日 3 篇 / 48,252 会员排行 |
| 网络日志(Blog) » 【Redtek】 个人网志(学习笔记) |
| 可打印版本 29,500 / 130 |
| 第106楼 redtek | 发表于 2007-01-14 12:07 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 直接定址表
(到106楼的时候,现在中文打字的速度早已经超过100字以上/每分钟了~:) 描述单元长度的标号 例程:将 code 段中的 a 标号处的 8 个数据累加,结果存储到 b 标号处的字中。 程序中,code、a、b、start、s 都是标号,它们仅仅表示了内存单元地址。 数据标号:除了表示内存单元的地址,还表示了内存单元的长度,即表示在此标号处的单元,是一个字节单元还是字单元,还是双字单元)。 使用这种包含单元长度的标号,可以使我们以简洁的形式访问内存中的数据。 它标记了存储数据的单元的地址和长度。 它不同于仅仅表示地址的地址标号。 反汇编上面代码: 下面程序将 code 段中 a处的8个数据累加,结果存储到b处的dword中,补全程序。 在其他段中使用数据标号 在其他段中,我们也可以使用数据标号来描述存储数据的单元和长度。 在后面加有 “:” 的地址标号,只能在代码段中使用,不能在其他段中使用。 将 data 段中 a 标号处的 8 个数据累加,结果存储到 b 标号处的字中。 如果想在代码段中,直接用数据标号访问数据,则需要用伪指令 assume 将标号所在的段和一个段寄存器联系起来。 否则编译器在编译的时候,无法确定标号的段地址在哪一个寄存器中。
seg 操作符,功能为取得某一标号的段地址。 将 data 段中 a 处的 8 个数据累加,结果存储到 b 处的字中,补全程序。
直接定址表 编写程序,以十六进制的形式在屏幕中间显示给定的 Byte 型数据。 利用表,在两个数据集合之间建立一种映射关系,可以用查表的方法根据给出的数据得到其在另一集合的对应数据。 1) 为了算法的清晰和简洁 2) 为了加快运算速度 3) 为了使程序易于扩充 程序入口地址的直接定址表 可以在直接定址表中存储子程序的地址,从而方便实现不同子程序的调用。 实现一个子程序 setscreen,为显示输出提供如下功能: 1) 清屏 2) 设置前景色 3) 设置背景色 4) 向上滚动一行 入口参数说明: 1) 用ah寄存器传递功能号: 0 表示清屏 1 表示设置前景色 2 表示设置背景色 3 表示向上滚动一行 2) 对2、3号功能,用al传送颜色值。(AL)={0,1,2,3,4,5,6,7} 各种功能的实现: 1) 清屏: 将显存中当前屏幕中的字符设为空格符 2) 设置前景色: 设置显存中当前屏幕中处于奇地址的属性字节:0、1、2位 3) 设置背景色: 设置显存中当前屏幕中处于奇地址的属性字节:4、5、6位 4) 向上滚动一行: 依次将第n+1行的内容复制到第n行处;最后一行为空。 编写包含多个功能子程序的中断例程 安装一个新的 int 7ch 中断例程,为显示输出提供如下功能子程序: 1) 清屏 2) 设置前景色 3) 设置背景色 4) 向上滚动一行 入口参数说明: 1) 用 ah 寄存器传递功能号: 0 表示清屏 1 表示设置前景色 2 表示设置背景色 3 表示向上滚动一行 2) 对于2、3号功能,用 al 传递颜色值,(al)={0,1,2,3,4,5,6,7} 遇到一个问题,在上面代码的 int 7ch 子程序的注解处。 暂时解决不了,不知道哪个宏指令可以让编译器认为 table 要从 200h 处为基址计算偏移(实际 table 应为 202h)。 关于数据标号与地址标号的区别分析
分析过程
当操作数据标号时,是在操作数据标号所示地址中的内容,它也代表长度。 如果 inc 它,则是在 inc 数据标号所示地址中的内容的值递增。 当操作地址标号时,是在操作它的偏移量。 [ Last edited by redtek on 2007-1-18 at 01:42 PM ] |
|
| 第107楼 redtek | 发表于 2007-01-15 12:33 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 使用BIOS进行键盘输入和磁盘读写
) 键盘输入引发 9 号中断,BIOS提供了 int 9 中断例程。 ) CPU在9号中断发生后,执行 int 9中断例程,从60H端口读出扫描码,并将其转化为相应的ASCII码或状态信息。 它们存储在指定空间(键盘缓冲区或状态字节)中。 ) 在CPU执行完INT9中断例程后,都放到了键盘缓冲区中。 键盘缓冲区中有16个字单元,可以存储15个按键的扫描码和对应的ASCII码。 ) 键盘缓冲区是用环形队列结构管理的内存区。 BIOS的INT9中断例程和INT16H中断例程是一对相互配合的程序。 INT9中断例程向键盘缓冲区中写入。 INT16H中断例程从键盘缓冲区中读了。 例程:接收用户的键盘输入,输入r,将屏幕上的字符设置为红色。 输入g,将屏幕上的字符设置为绿色。输入b,设置为蓝色。 字符串的输入 最基本的字符串输入程序,需具备以下功能: 1) 在输入的同时需要显示这个字符串 2) 一般在输入回车符后,字符串输入结束 3) 能够删除已经输入的字符 编写一个接收字符串的输入子程序,实现上面三个基本功能。 (DH)、(DI)=字符串在屏幕上显示的行、列位置。 DS:SI 指向字符串存储的空间,字符串以0为结尾符。 字符串的存储空间是一个字符栈,字符栈中的所有字符,从栈底到栈顶,组成一个字符串。 程序处理过程: 1) 调用 int 16h 读取键盘输入 2) 如果是字符,进入字符栈,显示字符栈中所有字符;继续执行1 3) 如果是退格键,从字符栈中弹出一个字符,显示字符栈中所有字符;继续执行1 4) 如果是Enter键,向字符栈中压入0,返回。 子程序:字符栈的入栈、出栈和显示 参数说明:(AH)=功能号: 0表示入栈,1表示出栈,2表示显示 DS:SI 指向字符栈空间 对于0号功能: (AL)=入栈字符 对于1号功能: (AL)=返回的字符 对于2号功能: (DH)、(DL)=字符串在屏幕上显示的行、列位置 [ Last edited by redtek on 2007-1-16 at 09:55 PM ] |
|
| 第108楼 redtek | 发表于 2007-01-17 01:32 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 看 本是 大师的贴子跟着学~:)
34字节DOS EXE文件,最短了? http://www.cn-dos.net/forum/viewthread.php?tid=26748&fpage=1 操作步骤
修改后的保留文件头为 32 字节,加上所写的指令为4字节(mov ah,4ch 和 int 21h),一共占了32+4=36字节~:) Debug移动代码到某个指定的内存区的命令给忘了,哈哈…… 关于修改 04h 与 08h 文件头的内容还不清楚,现在去找 .exe 文件头的资料~:))) (在本是大师贴子的第4楼关于文件结构的内容) (http://www.cn-dos.net/forum/redirect.php?fid=6&goto=lastpost) 相关资料:文件格式 (以下节选出自 http://db.kingsoft.com/lianzai/3.2.shtml - 《数量最多的病毒--文件型病毒》一文
(一知半解) [ Last edited by redtek on 2007-1-20 at 10:24 PM ] |
|
| 第109楼 namejm | 发表于 2007-01-17 09:25 |
| 荣誉版主 发帖 1,737 积分 5,226 来自 成都 | |
Originally posted by redtek at 2007-1-16 12:32: 呵呵,学汇编学昏了吧? |
|
| 第110楼 redtek | 发表于 2007-01-17 09:44 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
多谢namejm兄提醒,“32+4=26字节”错误更正了~:)
这错误看上去真可乐,哈哈哈……… [ Last edited by redtek on 2007-1-16 at 08:48 PM ] |
|
| 第111楼 redtek | 发表于 2007-01-18 03:34 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 磁盘操作
常用的 3.5 寸软盘分为上下两面,每面有80个磁道,每个磁道又分为18个扇区,每个扇区的大小为512B。 2面*80磁道*18扇区*512B=1474560 磁盘的实际访问由磁盘控制器进行,通过控置磁盘控制器来访问磁盘。只能以扇区为单位对磁盘进行读写。 在读写扇区时,要给出面号、磁道号和扇区号。 面号和磁道号从0开始,扇区号从1开始。 BIOS提供了对扇区进行读写的中断例程 int 13H。 读取0面0道1扇区的内容到 0:200 将 0:200 中的内容写入0面0道1扇区 将当前屏幕的内容保存在磁盘上 1.44 - 2880个扇区,从0编号:逻辑扇区为 0~~2879 0面79道18扇区,计算逻辑扇区号:(0*80+79)*18+18-1 [ Last edited by redtek on 2007-1-18 at 12:40 PM ] |
|
| 第112楼 redtek | 发表于 2007-01-19 06:58 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 中断例程 INT 21H 3F号子功能调用来操作DOS 管道。
通过编程的方式读取一个程序通过管道“发送”过来的内容。 参考资料: http://support.microsoft.com/kb/46376/zh-cn 来自微软网站。 上面链接中所参考的示例代码为: QuickBasic 程序(调用汇编代码完成读取管道内容) 如果 CF=0 , AX=实际读取的字节数 CF=1 , AX=出错代码 连蒙带猜的Debug试验过程……
通过管道实验过程: 在内存 0:200H 处,它们全被存到了自定义的( DS:DX )文件数据缓冲区内。 上面的实验过程是调用了 int 21 中断例程的 3FH 子功能来读取通过管道送过来的字符串。支持多行字符串,以 0DH 0AH 为回车换行。 也就是说,这样的原理可以应用在批处理中: 比如将输出的内容暂存在指定的内存中,而不是磁盘上(代替批处理所生成的临时文件)。 当需要的时候再取回来或是通过某种内存操作来分割(如我就想要第3行字符串,其它的都不要)等操作。 (一知半解) [ Last edited by redtek on 2007-1-20 at 10:23 PM ] |
|
| 第113楼 redtek | 发表于 2007-01-21 11:27 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【80x86汇编语言学习笔记】 字符串操作
方便的 BIOS int 10 -- 13号子功能调用 在第10行(行从0起,实为第11行),第0列(实为第1列)显示字符串: 上面显示字符串使用了 BIOS 功能调用。 自动从 DS:SI 装入字符到 AL 寄存器: LODSB 指令,将 DS:SI 地址中的 byte 字符装入 AL 寄存器,然后 SI+1,每次执行 LODSB 指令时均会如此,方便了字符串的传送。
获得命令行输入的参数(类似于批处理中的: %1 %2 %3 ....) 命令行输入的参数位于: DS:0081H 处,以 0AH 结束。 [ Last edited by redtek on 2007-1-21 at 01:39 PM ] |
|
| 第114楼 redtek | 发表于 2007-01-21 11:33 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【Windows环境下32位汇编语言学习笔记】 API原型中前缀详细解释:
API的参考手册中的函数原型为匈牙利表示法。 [ Last edited by redtek on 2007-1-20 at 10:35 PM ] |
|
| 第115楼 redtek | 发表于 2007-01-24 06:26 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【MS-DOS操作系统学习笔记】 引导扇区
当计算机从软盘启动,BIOS把引导盘中第1扇区载入地址为 0000:7c00 处的内存中。然后BIOS跑到 0X7C00 处开始执行引导扇区中的代码。 引导扇区的代码完成将整个操作系统载入到计算机内存并开始操作系统的引导。 第1扇区,就是 DOS Boot Record(DOS引导扇区)。 (待续……) [ Last edited by redtek on 2007-1-25 at 08:14 PM ] |
|
| 第116楼 redtek | 发表于 2007-01-25 02:57 |
| 金牌会员 发帖 1,147 积分 2,902 | |
彩色仿DOS窗口
|
|
| 第117楼 redtek | 发表于 2007-01-27 05:03 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【MS-DOS操作系统学习笔记】 文件操作
将字符串写入文件内。 int21 DOS功能调用: 40H 写文件 3FH 读文件 3EH 关闭文件 41H 删除文件 …… [ Last edited by redtek on 2007-1-26 at 04:08 PM ] |
|
| 第118楼 redtek | 发表于 2007-01-30 02:44 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
【Windows32位汇编语言学习笔记】 建立编程环境
Win32可执行文件叫做PE文件。 PE文件的基本结构和DOS可执行文件有很大不同。它把程序中的不同部分分成各种节区(Section),其中可以有一个节区是放置各种资源,如:菜单、对话框、位图、光标、图标和声音等。 可供选择的不同编译器: MASM,TASM,NASM 根据以上编译的优缺点最后选择不同工具软件集合方式开发 Win32 汇编: 汇编编译器: MASM软件包中的 ML.EXE 做为 Win32 汇编编译器 资源编译器: 使用 Microsoft Visual Studio 中的 RC.EXE 和 LINK.EXE…… …… 目前已被 Steve Hutchesson 缩合创建的开发软件包名为 MASM32,内收集了合适的工具软件、收集导入库、整理出完整的头文件、收集了来自全世界各地Win32汇编爱好者发布的源程序、帮助文档、IDE开发环境…… MASM32软件包使汇编不再只用来编写简单的程序和少量的核心模块,它的目标完全是为了用汇编写出专业的大型程序。 MASM32软件包的官方站点(在此下载): http://www.movsd.com 支持OS版本:Win2000 and later OS versions Win9x OS versions 开发工作环境的建立: · Editplus · UltraEdit32 MSDN · Hexedit Resource Wor5kshop Soft-ICE 反汇编软件W32DASM · Visual C++ 破解工具介绍: http://www.e-works.net.cn/Articles/511/Article31815.htm 编译一个例子: 基本开发环境基本安装完成~:) [ Last edited by redtek on 2007-1-29 at 08:59 PM ] |
|
| 第119楼 zhengzhichu01 | 发表于 2007-02-09 02:25 |
| 新手上路 发帖 2 积分 3 | |
|
很有感触啊?真是牛啊
|
|
| 第120楼 redtek | 发表于 2007-02-09 11:24 |
| 金牌会员 发帖 1,147 积分 2,902 | |
|
有好几次都想把书给撕了,要不就想砸点什么东东,……终于把入门的内容给看完了~:)
|
|
| 上一页 1 … 5 6 7 8 9 下一页 |
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |