原创 汇编初学者问题合集

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

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

 

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)

           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
这里写图片描述
你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

新的改变

我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:

  1. 全新的界面设计 ,将会带来全新的写作体验;
  2. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
  3. 增加了 图片拖拽 功能,你可以将本地的图片直接拖拽到编辑区域直接展示;
  4. 全新的 KaTeX数学公式 语法;
  5. 增加了支持甘特图的mermaid语法1 功能;
  6. 增加了 多屏幕编辑 Markdown文章功能;
  7. 增加了 焦点写作模式、预览模式、简洁写作模式、左右区域同步滚轮设置 等功能,功能按钮位于编辑区域与预览区域中间;
  8. 增加了 检查列表 功能。

功能快捷键

撤销:Ctrl/Command + Z
重做:Ctrl/Command + Y
加粗:Ctrl/Command + B
斜体:Ctrl/Command + I
标题:Ctrl/Command + Shift + H
无序列表:Ctrl/Command + Shift + U
有序列表:Ctrl/Command + Shift + O
检查列表:Ctrl/Command + Shift + C
插入代码:Ctrl/Command + Shift + K
插入链接:Ctrl/Command + Shift + L
插入图片:Ctrl/Command + Shift + G

合理的创建标题,有助于目录的生成

直接输入1次#,并按下space后,将生成1级标题。
输入2次#,并按下space后,将生成2级标题。
以此类推,我们支持6级标题。有助于使用TOC语法后生成一个完美的目录。

如何改变文本的样式

强调文本 强调文本

加粗文本 加粗文本

标记文本

删除文本

引用文本

H2O is是液体。

210 运算结果是 1024.

插入链接与图片

链接: link.

图片: Alt

带尺寸的图片: Alt

当然,我们为了让用户更加便捷,我们增加了图片拖拽功能。

如何插入一段漂亮的代码片

博客设置页面,选择一款你喜欢的代码片高亮样式,下面展示同样高亮的 代码片.

// An highlighted block var foo = 'bar'; 

生成一个适合你的列表

  • 项目
    • 项目
      • 项目
  1. 项目1
  2. 项目2
  3. 项目3
  • 计划任务
  • 完成任务

创建一个表格

一个简单的表格是这么创建的:

项目Value
电脑$1600
手机$12
导管$1

设定内容居中、居左、居右

使用:---------:居中
使用:----------居左
使用----------:居右

第一列第二列第三列
第一列文本居中第二列文本居右第三列文本居左

SmartyPants

SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:

TYPEASCIIHTML
Single backticks'Isn't this fun?'‘Isn’t this fun?’
Quotes"Isn't this fun?"“Isn’t this fun?”
Dashes-- is en-dash, --- is em-dash– is en-dash, — is em-dash

创建一个自定义列表

Markdown
Text-to- HTML conversion tool
Authors
John
Luke

如何创建一个注脚

一个具有注脚的文本。2

注释也是必不可少的

Markdown将文本转换为 HTML

KaTeX数学公式

您可以使用渲染LaTeX数学表达式 KaTeX:

Gamma公式展示 Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N \Gamma(n) = (n-1)!\quad\forall n\in\mathbb N Γ(n)=(n1)!nN 是通过欧拉积分

Γ ( z ) = ∫ 0 ∞ t z − 1 e − t d t   . \Gamma(z) = \int_0^\infty t^{z-1}e^{-t}dt\,. Γ(z)=0tz1etdt.

你可以找到更多关于的信息 LaTeX 数学表达式here.

新的甘特图功能,丰富你的文章

gantt
        dateFormat  YYYY-MM-DD
        title Adding GANTT diagram functionality to mermaid
        section 现有任务
        已完成               :done,    des1, 2014-01-06,2014-01-08
        进行中               :active,  des2, 2014-01-09, 3d
        计划一               :         des3, after des2, 5d
        计划二               :         des4, after des3, 5d
  • 关于 甘特图 语法,参考 这儿,

UML 图表

可以使用UML图表进行渲染。 Mermaid. 例如下面产生的一个序列图::

张三 李四 王五 你好!李四, 最近怎么样? 你最近怎么样,王五? 我很好,谢谢! 我很好,谢谢! 李四想了很长时间, 文字太长了 不适合放在一行. 打量着王五... 很好... 王五, 你怎么样? 张三 李四 王五

这将产生一个流程图。:

链接
长方形
圆角长方形
菱形
  • 关于 Mermaid 语法,参考 这儿,

FLowchart流程图

我们依旧会支持flowchart的流程图:

  • 关于 Flowchart流程图 语法,参考 这儿.

导出与导入

导出

如果你想尝试使用此编辑器, 你可以在此篇文章任意编辑。当你完成了一篇文章的写作, 在上方工具栏找到 文章导出 ,生成一个.md文件或者.html文件进行本地保存。

导入

如果你想加载一篇你写过的.md文件或者.html文件,在上方工具栏可以选择导入功能进行对应扩展名的文件导入,
继续你的创作。


  1. mermaid语法说明 ↩︎

  2. 注脚的解释 ↩︎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值