汇编教程2 by sssa2000

原创 2004年07月08日 14:13:00

汇编教程2 by sssa2000<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

  和女朋友有矛盾了,还是电脑好,可以让我静心。

  让我们开始把。上次用一个例子给大家一个模糊的概念,可能你并不是完全明白那个例子的来龙去脉,这没有关系,有个认识就可以了,

我觉得学习汇编最大的障碍是 书上的教法不适合初学者,即使是有基础的人学起来也有点迷糊,既然是编成当然要从实际入手,这次开始我们来一个例子热身,和上次那个差不多

=========================================================================

;目的:将键盘输入的多字符(注意是多字符)保存到由若干个存储单元组成的变量inbuf中,以回车结束。

code segment

     assume cs:code         ;由于没有声明变量,不需要设置数据段

start: mov bx,00h

again: mov ah,01h           ;调用中断,作用不用说了吧,键入一个字符将ascii到al(注意是一个字符)

       int 21h

       cmp al,0dh           ;如果al中的值是0dh,

       jz stop              ;则转到stop标号处执行

       mov [inbuf+bx],al    ;把al的数据装入到地址是inbuf+bx的地址

       inc bx               ;bx=bx+1

       jmp again            ;跳到again标号处执行,以接受下一个字符,直到用户回车

stop:  mov ah,4ch

       int 21h

code   ends

       end start

===============================================================================

 

程序不长,初学者最怕很长一段的程序,我那时也怕,现在也怕,人懒呀。

就这段程序,讲一讲mov,和分支程序。

 

注意了,背景音乐好了么,建议用神秘园,为什么?因为我在听。

 

mov指令

格式:mov 目的操作数,原操作数

说明:1、立即数,段寄存器cs,不能作为目的操作数;

    2、原操作数和目的操作数不能同为存储器操作数。下面指令是错误的

       mov 4h,bl

              mov cs,ax

              mov [1000h],[bx] ;[]表示取地址

   3、原操作数和目的操作数的类型必须一致,即同为单字节数,或同为双字节数,当指令中有一个操作数的类型明确时,另一个操作数被视为同一类型。可以用byte ptr 或word ptr将一个存储器操作数定义为字节或字类型。当存储器操作数为字类型时,寄存器或立即数的高字节对应其高地址,低字节对应低地址。

          解释一下,byte ptr是将一个操作数强制定义为byte类型,word ptr类似,类似c语言的()

                    最后一句话什么意思呢?我们知道,一个字=两个字节,在计算机中,对于字的存储是以字节为单位的,大家都知道堆栈遵循先进后出的原则,所以,要高低位对换,举个例子:一个字类型,值为:1234h,在内存中的位置:

|  34h  |  34为变量的低位。

|-------|

|  12h  |  12为变量的高位。

|------ |

|       |

好,我们来看这句话,当存储器操作数为字类型时,寄存器或立即数的高字节对应其高地址,低字节对应低地址。举个例子,

mov [2000h],ax

用图表示:    

|  存储器  | 

|----------|    

|存ax的低位al 

|----------|

|存ax的高位ah           

|----------|

 

 

分支程序

就是if...then ,goto等等这些,当然在汇编里面,没有这些语句

 

先看看cmp指令,

格式:cmp 目的数,原操作数

作用:根据两操作数的大小关系产生状态标志值,

 

jc/jnc指令

格式:jc/jnc 标号

作用:jc有进位则转,即cf=1  jnc相反 (什么是cf? 以后我会专门讲解电脑的寄存器,别急)

 

jp/jnp

jp:1的个数为偶数则转(pf=1),jnp相反

 

jz/jnz

jz:为零则转,(zf=1) jnz:相反

 

jl/jge

jl:小于则转(sf<>of或者zf=0) jge 大于等于则转(sf<=of或者zf=1)

。。。。。。。。还有很多哦,不写了,自己查资料,不要太懒了哦。

 

还有一个最重要的,jmp无条件跳转指令,不用解释了吧?

上面那个例子再看看,体会一下怎么跳转的。会有收获的哦~~

 

不过瘾?再来一段程序,

=========================================================================

求x-y的绝对值

dseg segment

     x db 40h

     y db 73h

     z db ?

dseg ends

sseg segment stack  ;设置堆栈段

     db 80h dup(0)

sseg ends

cseg segment

     assume ds:dseg,ss:sseg,cs:cseg  ;是不是觉得和以前的不一样了?呵呵,体会一下

start:

     mov ax,dseg

     mov al,x

     cmp al,y   ;根据x-y产生状态标志

     jl xl      ;有符号数则跳转

     sub al,y   ;

     mov z,al    ;z=x-y

xl:  mov bl,y

     sub bl,al

     mov z,bl     ;z=y-x

ok:

     mov ah,4ch

     int 21h

cseg ends

     end start

=============================================================================

 

 

好了,应该没什么问题了吧? 本来还想讲一些寻址方式的,下一章需要专门讲一下基础知识,避免不了的,不过到了现在,你对汇编的认识应该有点深度了,汇编其实并不难的,是么?如果你有这个感觉了,那我的目的也达到了,下一讲我们讲解寄存器,和寻址方式。不讲不行的。好了,class over!

汇编语言--ARM汇编

ARM汇编指令总结目的总结目的是为了看懂ARM返汇编程序含义。如果是抱着来看这篇blog的盆友,希望可以帮到你们;如果有错误,请多指出。谢谢!#ARM指令的一般格式arm指令字长为固定的32位。一条典...
  • daiyibo123
  • daiyibo123
  • 2015年12月09日 19:30
  • 2892

asm基础——使用nasm和bochs学习汇编

使用nasm得到二进制并使用boch来调试。
  • jiangwei0512
  • jiangwei0512
  • 2016年01月27日 22:32
  • 1421

iOS汇编教程:ARM(2)

感谢唐巧抽出时间对本文进行double-check。 本文是iOS汇编教程:ARM第二篇。 iOS汇编教程:ARM目录如下[共分为两篇]: iOS汇编教程:ARM(1) 开始:...
  • cui7230102
  • cui7230102
  • 2013年11月05日 13:42
  • 712

c语言自增运算的汇编探究

出于对c语言编译链接过程的疑问,近段时间一直在看关于编译链接以及可执行文件加载方面的书.今晚忽然心血来潮,想看看对于自增运算gcc究竟如何编译,所以写了下面这段小程序验证一下(部分代码 环境 ubun...
  • sinat_16699637
  • sinat_16699637
  • 2016年03月09日 23:19
  • 476

asm基础——使用nasm进行汇编(基础)

asm基础——使用nasm进行汇编(基础)
  • jiangwei0512
  • jiangwei0512
  • 2016年03月11日 23:32
  • 2710

[汇编]伪指令(二)

[汇编]伪指令(二) 数据定义及存储器分配伪指令   80x86提供了各种数据及存储器分配伪指令,这些伪指令在汇编程序对源程序进行汇编期间,由汇编程序完成数据类型定义及存储器分配等功能。 ...
  • pianistOfSoftware
  • pianistOfSoftware
  • 2016年07月20日 15:39
  • 768

《汇编语言(第3版)》王爽 课程设计2

本次课程设计的任务是编写一个可以自行启动的计算机,不需要在现有的操作系统环境中运行的程序。 该程序功能如下: (1 )、列出功能选项,让用户通过键盘进行选择,界面如下: 1)、reset  pc  ;...
  • lipanxu
  • lipanxu
  • 2017年01月02日 12:28
  • 920

入门级ARM汇编指令

无论是体系结构还是指令集,大家或多或少都应该对X86汇编有些了解,而对于嵌入式领域已被广泛采用的ARM 处理器,了解的可能并不多。如果你有兴趣从事嵌入式方面的开发,那么了解一些RISC 体系结构和AR...
  • ssdsafsdsd
  • ssdsafsdsd
  • 2013年03月18日 10:46
  • 3634

linux平台学x86汇编(四):从“hello world!”开始

【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】         汇编语言程序由定义好的段构成,每个段有各自的目的。三个最常...
  • gentleliu
  • gentleliu
  • 2015年05月06日 23:56
  • 4782

ARM 汇编中灵活的第二操作数(Flexible second operand)

10.3 Flexible second operand (Operand2)
  • ASMARM
  • ASMARM
  • 2014年06月08日 09:52
  • 1015
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编教程2 by sssa2000
举报原因:
原因补充:

(最多只允许输入30个字)