20CN网络安全小组第一代论坛
发表新主题  发表回复

个人资料 | 社区目录 用户登录 | | 论坛搜索 | 常见问题 | 论坛主页
  下一个最老的主题   下一个最新的主题
» 20CN网络安全小组第一代论坛   » 电 脑 技 术   » 编程破解   » 学习汇编的好帮手(第九篇)

   
作者 标题: 学习汇编的好帮手(第九篇)
第007元素
未注册


图标 1  发表于         编辑/删除帖子   引用原文回复  
※ 您是否觉得用组译器产生程式的方法,比 DEBUG 麻烦多了!
※ 以小程式而言,的确是如此;但对於较大的程式,您就可以发
 现其优点了。
※ 我们将 ASCII 程式以组译器方式再做一次,看看有无差异。
※ 首先,您必须先利用文书处理程式建立 ASCII.ASM 档案。

prognam segment ;start of segment
assume cs:prognam ;assume what's in CS
mov cx,100h ;put counter in CX
mov dl,0 ;first ASCII character
next: mov ah,2 ;Display Output Function
int 21h ;call DOS to print
inc dl ;next ASCII chacter
loop next ;do again, until counter = 0
int 20h ;return to DOS
prognam ends ;end of segment
end ;end of assembly

※ 在组合语言的原始程式码中,每一个程式列都包含四项元素∶
 start: mov dl,1 ;first character
 标记 运算子 运算元 注解
※ 在原始档案中加上注解可使程式更易了解,便於以後参考。

※ 每列注解栏以『;』开头。
※ 组译器会将『;』以後的叙述当做注解而不予理会。
※ 注解栏的资料不会出现在 OBJ、EXE 或 COM 档案中。
※ 在中文系统下,注解也可使用中文,但为了程式的可携性,
 建议您还是练习英文吧!

※ 由於在撰写原始程式码时,我们并不知道每一程式列的位址
 ,所以必须以符号名称来代表相对位址,称为『符号位址』。
如上 next: mov ah,2 ;Display Output Function
之 next:
※ 我们通常在适当列上的标记栏位置上,键入符号位址。
※ 当要修改程式时,会发现使用标记让程式的弹性较大,因为
 组译器会自动算出标记栏中的符号位址。

※ 标记(label)最长可达 31 个字元,因此我们在程式中,尽
 量以简洁易懂的文字做为标记。
※ 标记栏是每列的第一栏,可与所要标记的指令在同一列,也可
 位於该指令的前一列。
※ 现在,您可以将此 ASCII.ASM 档案组译成 ASCII.COM 了。
1.请输入 MASM ASCII 3.请输入 EXE2BIN ASCII ASCII.COM
2.请输入 LINK ASCII 4.请输入 ASCII

Microsoft (R) Macro Assembler Version 5.10
Copyright (C) Microsoft Corp 1981, 1988. All rights reserved.
Object filename [ASCII.OBJ]:

Source listing [NUL.LST]:

Cross-reference [NUL.CRF]:

48096 + 403883 Bytes symbol space free
0 Warning Errors
0 Severe Errors

※ 对初学者而言,MASM 的功能太强了,它的许多命令太复杂,
 以致常会妨碍了我们学习组合语言的兴致与效果。
※ 某些高明的指令事实上只对颇有经验的组合语言程式师有用
 ,对我们而言,是太过高深了。
※ 事实上,使用 MASM 就好像在开 747 一样,只有 DEBUG 才有
 螺旋桨飞机的味道;因为,在 DEBUG 上面的控制全部都跟组合
 语言有直接的关系。
※ 如果您觉得组合语言蛮有趣的,终究您必须要用到 MASM。
※ 为了使学习组合语言程式有个好的开始,您必须要先排除那些
 华丽复杂的命令,将心力集中在最重要的几个命令上。
※ 随著您对 MASM 技巧的成长,最後您一定会感觉它是您在组合
 语言程式设计上的左右手。

※ 当您以组译器组合您自己设计的程式时,常会发生打字错误、
 助忆符号名称拼错、十六进制数字少了h、逻辑错误等。
※ 组合语言的老手常给新鲜人的忠告是∶最好预期自己所写的
 程式一定会有些错误。
※ 如果第一次执行程式後,就得到合理的答案,您最好还是带
 著怀疑的心,因为它可能是错的。
※ 原则上,只要大体的逻辑架构正确,发掘程式中间题的过程
 ,应该与撰写程式本身有相同的乐趣。
※ 撰写大程式时,最好能分成许多模组(Module),如此可使
 程式本身的目的较单纯,易於撰写与维修;另外也可让程式
 式中不同的部份之间的介面较清楚,并节省组译的时间。

※ 我们将撰写一个能从键盘取得一个十进位的数值,
 并将其转换成十六进位数值而显示於萤幕上的『大程式』。
※ 要让 8088 微处理器执行这样的功能,我们必须先将此问题
 分解成一连串的步骤,称为『程式规划』。
※ 首先,以流程图的方式,来确保整个程式的逻辑没有问题。
※ 您可使用一种界於英文与 8088 组合语言间的『虚拟语言』来
 解释程式,例如∶以 BASIC 的方式来表达程式规划的问题。
※ 最後就是将『虚拟程式码』改写成 8088 组合语言的程式。
※ 这种模组化的规划方式,称之为『由上而下的程式规划』。
※ 在真正撰写程式时,却是从最小的单位(模组)开始撰写,
 当每个模组都完成之後,再将其合并成大方程式;这种大处
 著眼,小处著手的方式称为『由下而上的程式设计』。

※ 我们的第一个模组是 BINIHEX,其主要用途是从 8088 的 BX
 暂存器中取出二进位数,并以十六进位方式显示在萤幕上。

IP: 已记录

 
发表新主题  发表回复 关闭主题 突出主题 移动主题 删除主题 下一个最老的主题   下一个最新的主题
 - 适于打印的主题视图
转到:
联系我们 | 20CN网络安全小组

Powered by Infopop Corporation
UBB.classic™ 6.5.0
NetDemon修改版 1.5.0, 20CN网络安全小组 版权所有。