[原创]汇编初学者问题合集

简介:

几个简单的汇编初学者问题总结 

 

0 关于指令时间的问题

 

上次有兄弟问关于 指令时间的问题,答复查看 intel 手册是一个办法。
但很多人没有那个东东吧!,所以可以用另一招,在编译时加入 /Sc

 选项:

ML /Fl /Sc Kinds.asm

还有有位兄弟问过 为什么 mov ax,offset table 比 lea ax,table 速度

要快?但到底快到什么程度,恐怕也没法感性认识。下面让偶们来

看看实际效果:

首先在源文件 Kinds.asm 中敲入:

data    segment
tabledw?
data    ends

code    segment
assume cs:code,ds:data
start:
push  ds
sub    ax,ax
push  ax

mov   ax,data
mov   ds,ax

mov   ax,offset table
lea     ax,table

idiv    table

retf
code    ends
     end    start

保存后,控制台中敲入:

ML /Fl /Sc Kinds.asm

完成后,在同一目录下用记事本打开 Kinds.lst 文件:

0000     datasegment
0000 0000     tabledw?
0002     dataends

0000     codesegment
assume cs:code,ds:data
0000start:
0000  10   1Epushds
0001   3   2B C0     subax,ax
0003  11   50         pushax

0004   4   B8 ---- Rmovax,data
0007   2   8E D8     movds,ax

0009   4   B8 0000 Rmovax,offset table
000C   8   8D 06 0000 R     leaax,table

0010 177+  F7 3E 0000 R     idivtable
    
0014  26   CB     retf
0015   codeends
endstart

可以清楚地看到 :

mov ds,ax 只需要 2个时钟周期
mov ax,offset table 需要 4个
lea ax,table 则需要 8 个
而 idiv table 更是夸张的用到了超过 177 个时钟周期。

是不是一目了然呢?呵呵!

1 debug中使用sal指令的问题

 

[问题]

在debug里面使用A指令,输入如下代码:

***************************
MOV AX,0ABC
DEC AX
AND AX,00FFH
MOV CL,4
SAL AL,1

***************************
当输入到 sal al,1 时提示error

[回答]

shl 与 sal 作用是完全一样的,所以在编译的时候自动将
sal 转换成了 shl .使用sal  dubug 不识别,换成shl就搞定了。
可以把上述代码编译成 EXE 文件,然后用debug 中 u 指令查看,

结果 sal 的地方 被换成 shl。


2 看似 ''不可能'' 的汇编问题                            

 

[问题]

怎样用一条指令把BX的内容加上123,放在AX里?

[回答]

猛一看起来好像不可能,通常的做法是:

add   bx,123

mov  ax,bx

这至少要用到两条指令~~~要是mips机构的系统就好了,因为其中有

3参数指令:

addx   $1,$2,100     -----      $1=$2+100

那么没办法了么?不是的!

想一下 lea 指令 ,呵呵~~~看一下如下的指令:

lea    ax,[bx+123]

lea 取变量的偏移放入 ax 中,[] 代表变量是间接寻址,他的地址就等于[]

中的值,即 bx+123,这样就达到了题目的目的。

3 用移位指令来代替乘法指令                  

 

大家都知道可以用移位指令来做形如 2,4,8 等2的整次幂的乘法,

但是非整次幂呢?比如 乘10。其实很简单:

36 * 10 = 36 * (8 + 2) = 36 * 8 + 36 * 2
即等于:
24h * 8 + 24h * 2


接下来不用我讲了吧,这一方法也可以进一步推广。

 

4 察看 debug 状态寄存器 

 
  of(溢出)   df(方向)   if(中断)   sf(符号)   zf(零)   af(辅助进位)   pf(奇偶)   cf(进位)  
  为一的时候  
  ov(OVerflow)   dn(DowN)   ei(Enable   Interrupt)   ng(NeGtive)   zr(ZeRo)   ac(Auxiliary   Carry)   pe(Parity   Even)   cy(CarrY)  
  为零的时候  
  nv(Not   oVerflow)   up(UP)   di(DIsable   interrupt)   pl(PLus)   nz(Not   Zero)   na(Not   Auxiliary)   po(Parity   Odd)   nc(Not   Carry)   

 

5 关于简单汇编环境的搭建

如果是老鸟,则随心所欲自由选择。我在这里只是给新手一些我的建议。

我一向反对新手一上来(毫无汇编编译经验)就使用汇编的集成开发环境比如

radasm之类,这样不但容易出错,而且不能真正了解编译器和连接器的底

层命令行用法。因为汇编本身编译就已经很简单了,不像C++之类有那么多

优化的东东,你再套一个花里胡哨的集成环境,对初学者岂不很累?

但我认为用一个带颜色标记的编辑器却是有必要的。

(比如简单的几句用记事本就很好,复杂的我推荐使用editplus2(别忘了要

下载汇编的语法文件。)

总的来说整个汇编环境是这样的:

16位dos程序: masm6.1x or nasm + editplus2

32位windows程序: masm32v9.0 or nasm + editplus2 + 一个资源编辑器

(masm611下载地址: www.aogosoft.com,masm32下载地址

   www.masm32.com)

相关文章
|
4月前
|
Java C语言
c语言基础知识整理与帮助理解(第一篇)
c语言基础知识整理与帮助理解(第一篇)
60 0
|
6月前
|
存储 自然语言处理 编译器
C语言初阶——手把手教零基础/新手入门(万字心得笔记)
C语言初阶——手把手教零基础/新手入门(万字心得笔记)
62 0
|
10月前
|
存储 人工智能 安全
C语言入门基础知识(万字笔记)
本篇文章,将会主要介绍c语言的基本数据类型、基本运算符、语句,三大结构、数组、指针、宏定义等内容
|
10月前
|
存储 程序员 编译器
C语言入门万字笔记
C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课
|
存储 自然语言处理 算法
C语言总结(前言+第一章)
是对C语言程序设计的一次期末总结,也是对未来从事相关工作的一次展望和打下基础。编程能力从来不会是一蹴而就的,而是日积月累的反反复复的练习和思考总结出来的,不是多少天就可以速成的。编程是一项引发积极思维的活动,它不是一种简单的技能,不是只要数据有关规则,熟能生巧就能完成任务的编程,需要指挥编写每一个程序,都要积极开动脑筋,发挥创造精神,编程是一件很灵活的工作,没有标准答案,不同的人可以写出不同的程序。
66 0
|
存储 自然语言处理 安全
C++从入门到精通(第一篇) :C++的入门(基础语法的整理)
在C/C++中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作 用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字 污染,namespace关键字的出现就是针对这种问题的。
119 0
C++从入门到精通(第一篇) :C++的入门(基础语法的整理)
|
JSON Java 测试技术
《Python编程:从入门到实践》学习记录(9-11)基础语法部分
《Python编程:从入门到实践》学习记录(9-11)基础语法部分
《Python编程:从入门到实践》学习记录(9-11)基础语法部分
|
开发框架 Java .NET
《Python编程:从入门到实践》学习记录(5-8)基础语法部分
《Python编程:从入门到实践》学习记录(5-8)基础语法部分
《Python编程:从入门到实践》学习记录(5-8)基础语法部分
|
索引 Python 容器
《Python编程:从入门到实践》学习记录(1-4)基础语法部分
《Python编程:从入门到实践》学习记录(1-4)基础语法部分
《Python编程:从入门到实践》学习记录(1-4)基础语法部分
|
算法 SEO 搜索推荐
如何写好高质量的原创文章?
随着百度算法的不断升级,百度越来越重视原创文章了,但是原创文章可不单单是用工具查询的相似度为0的文章,更多的应当是可以解决用户需求,能够引发用户阅读兴趣的文章,即看了这篇文章还想下次再来你的网站进行学习。
1220 0

相关实验场景

更多