当前位置: 网学 > 编程文档 > 汇编语言 > 正文

汇编语言超浓缩教程

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/18
下载{$ArticleTitle}原创论文样式
8086执行这样的功能,我们必须先将此问题分解成一连串的步骤,称为程序规划。首先,以流程图的方式,来确保整个程序在逻辑上没有问题(不用说了吧!什么语言都要有此步骤)。这种模块化的规划方式,称之为“由上而下的程序规划”。而在真正写程序时,却是从最小的单位模块(子程序)开始,当每个模块都完成之后,再合并成大程序;这种大处著眼,小处著手的方式称为“由下而上的程序设计”。

  我们的第一个模块是BINIHEX,其主要用途是从8086的BX寄存器中取出二进制数,并以十六进制方式显示在屏幕上。注意:子程序如不能独立运行,实属正常。
   binihex segment
   assume cs:binihex
   mov ch,4 ;记录转换后的十六进制位数(四位)
   rotate: mov cl,4 ;利用CL当计数器,记录寄存器数位移动次数
   rol bx,cl ;循环寄存器BX的内容,以便依序处理4个十六进制数
   mov al,bl ;把bx低八位bl内数据转移至al
   and al,0fh ;把无用位清零
   add al,30h ;把AL内数据加30H,并存入al
   cmp al,3ah ;与3ah比较
   jl printit ;小于3ah则转移
   add al,7h ;把AL内数据加30H,并存入al
   printit:mov dl,al ;把ASCII码装入DL
   mov ah,2
   int 21h
   dec ch ;ch减一,减到零时,零标志置1
   jnz rotate ;JNZ:当零标志未置1,则跳到指定地址。即:不等,则转移
   int 20h ;从子程序退回主程序
   binihex ends
   end

  利用循环左移指令ROL循环寄存器BX(BX内容将由第二个子程序提供)的内容,以便依序处理4个十六进制数:1. 利用CL当计数器,记录寄存器移位的次数。2.将BX的第一个十六进制值移到最右边。利用 AND (逻辑“与”运算:对应位都为1时,其结果为1,其余情况为零)把不要的部份清零,得到结果:先将BL值存入AL中,再利用AND以0Fh(00001111)将AL的左边四位清零。由于0到9的ASCII码为30h到39h,而A到F之ASCII码为41h到46h,间断了7h,所以得到结果:若AL之内容小于3Ah,则AL值只加30h,否则AL再加7h。ADD指令会将两个表达式相加,其结果存于左边表达式内。标志寄存器(Flag Register)是一个单独的十六位寄存器,有9个标志位,某些汇编指令(大部份是涉及比较、算术或逻辑运算的指令)执行时,会将相关标志位置1或清0, 常碰到的标志位有零标志(ZF)、符号标志(SF)、溢出标志(OF)和进位标志(CF)。 标志位保存了某个指令执行后对它的影响,可用其他相关指令,查出标志的状态,根据状态产生动作。CMP指令很像减法,是将两个表达式的值相减,但寄存器或内存的内容并未改变,只是相对的标志位发生改变而已:若 AL 值小于 3Ah,则正负号标志位会置0,反之则置1。 JL指令可解释为:小于就转移到指定位置,大于、等于则向下执行。CMP和JG 、JL等条件转移指令一起使用,可以形成程序的分支结构,是写汇编程序常用技巧。

  第二个模块DECIBIN 用来接收键盘打入的十进制数,并将它转换成二进制数放于BX 寄存器中,供模块1 BINIHEX使用。
   decibin segment
   assume cs:decibin
   mov bx,0 ;BX清零
   newchar:mov ah,1 ;
   int 21h ;读一个键盘输入符号入al,并显示
   sub al,30h ;al减去30H,结果存于al中,完成ASCII码转二进制码
   jl exit ;小于零则转移
   cmp al,9d
   jg exit ;左>右则转移
   cbw ;8位al转换成16位ax
   xchg ax,bx ;互换ax和bx内数据
   mov cx,10d ;十进制数10入cx
   mul cx ;表达式的值与ax内容相乘,并将结果存于ax
   xchg ax,bx
   add bx,ax
   jmp newchar ;无条件转移
   exit: int 20 ;回主程序
   decibin ends
   end
   CBW 实际结果是:若AL中的值为正,则AH填入00h;反之,则AH填入

  • 上一篇资讯: 如何学习汇编语言
  • 下一篇资讯: Linux下的汇编程序设计
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号