`
810364804
  • 浏览: 784994 次
文章分类
社区版块
存档分类
最新评论

用汇编语言编写程序打印ASCII表

 
阅读更多

打印一个ASCII表在高级程序设计语言中是一个非常简单的程序,但是用汇编又该如何编写呢?


一、设计思路

我们可以按15行*16列的表格形式显示ASCII码为10H100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII0)隔开。

显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:

Movah,02h

Movdl,输出字符的ASCLL码

Int21h

可把dl初始化为10H,然后不断使其加1(用INC指令)以取得下一个字符的ASCLL码。


显示空白符时,用其ASCLL码0置入dl寄存器。每行结束时,用显示回车(ASCLL为0dh)和换行符(ASCLL为0ah)来结束本行并开始下一行。


由于逐个显示相继的ASCLL字符时,需要保存并不断修改dl寄存器的内容,而显示空白,回车,换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASCLL字符。具体用法是:在显示空白或回车,换行符前用指令

Pushdx

把dl的内容保存到堆栈中去。在显示空白或回车,换行符前用指令

Popdx

恢复dl寄存器的原始内容。


二、程序实现代码

采用类似于C语言的双层循环输出的方式,在外层循中输出一行,总共循环15次,输出15行;在内层循环中输出一行中的16个字符,循环16次。用DX寄存器保存对应的字符的ASCII值,并增加DX的值来得到下一个ASCII码。


具体实现如下:

assume cs:codesg

codesg segment
	;设置寄存器初值
	mov dx, 0000H
	mov dl, 10H 	;从ASCII码为10H的字符开始显示
	mov cx, 000FH	;设置外循环的次数15,即要显示的行数
	mov ax, 0000H
	
  	r:
  		mov ah, 02H		;设置显示方式
  		push cx			;保存外循环次数的计数
  		mov cx, 0010H	;设置内循环次数16,即一行16个字符
  		
  	c:
  		int 21H			;显示ASCII值为[dl]的字符
		push dx			;保存dx的值
		mov dl, 00H		;输出空格
		int 21H
		
		pop dx			;恢复dx的值,并加1,产生下一个ASCII字符
		inc dx
		loop c
		;已经进行完了一次内循环
		pop cx			;恢复外循环次数的计数
		push dx			;保存dx的值
		
		mov dl, 0dH		;输出回车换行
		int 21H
		mov dl, 0aH
		int 21H
		
		pop dx			;恢复dx的值
		
		loop r
		;外循环结束,程序的功能完成
	mov ax, 4c00H
	int 21H
codesg ends
end
运行结果如下:



三、程序分析

代码采用类似于C语言的双层循环输出的方式,在外层循中输出一行,总共循环15次,输出15行;在内层循环中输出一行中的16个字符,循环16次。用DX寄存器保存对应的字符的ASCII值,并增加DX的值来得到下一个ASCII码。


由于在输出空格、回车和换行时,会破坏DX中原来的值,所以在用空格、回车和换行的ASCII值覆盖DX寄存器原来的内容时,先把DX寄存器中的内容压入栈中保存,即PUSHDX。输出空格、回车和换行后,调用POPDX恢复DX寄存器的值。以便下次直接把DX的值加1产生后继字符。


由于本程序中使用了两个循环,而每一个循环中都要用CX保存和记录循环的次数,所以在进入内层循环时,要先把外层循环的计数,即用PUSHCX,把CX的值压栈保存。在内层循环结束时,再恢复外层循的计数,即POPCX。然后在LOOP指令中判断外层循环是否完成退出。


PS:由于所用的操作系统问题,在运行程序时后面一些行(ASCII码为128及以后的行)有时会显示乱码。可用虚拟软件虚拟16位系统或在Debug中运行该程序即可正确输出。



分享到:
评论

相关推荐

    asm 汇编语言基础知识

    例如,编写程序,判断一个年份是否是闰年的汇编语言源程序,可以在DOS模式下用编辑程序EDIT.EXE建立汇编语言源程序文件ABC.ASM,注意文件名的扩展名必须是.ASM。也可以在Windows 2000或者在Windows XP环境下鼠标单击...

    语言程序设计课后习题答案

    迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。 1-2 面向对象的编程语言有哪些特点? 解: 面向对象的编程语言与以往各种编程...

    windows驱动开发技术详解-part2

     3.6 编写程序加载NT式驱动  3.6.1 SCM组件和Windows服务  3.6.2 加载NT驱动的代码  3.6.3 卸载NT驱动的代码  3.6.4 实验  3.7 WDM式驱动的加载  3.7.1 WDM的手动安装  3.7.2 简单的INF文件剖析  ...

    Windows驱动开发技术详解的光盘-part1

     3.6 编写程序加载NT式驱动  3.6.1 SCM组件和Windows服务  3.6.2 加载NT驱动的代码  3.6.3 卸载NT驱动的代码  3.6.4 实验  3.7 WDM式驱动的加载  3.7.1 WDM的手动安装  3.7.2 简单的INF文件剖析  ...

    计算机应用基础试卷十四.doc

    用户用计算机高级语言编写的程序,通常称为 A.源程序 B.目标程序 C.汇编程序 D.二进制代码程序 6.计算机操作系统的主要功能是( ) A.对计算机的所有资源进行控制和管理,为用记使用计算机提供方便 B.对源程序进行...

    Visual C++ 2005入门经典--源代码及课后练习答案

    他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了实时闭环工业控制系统。Horton拥有丰富的教学经验(教学内容包括C、C++、Fortran、PL/1、APL等),同时还是机械、加工...

    会计理论考试题

    40.用高级语言编写的源程序,必须经过__B___处理,计算机才能执行。 A、汇编 B、解释或编译 C、解释 D、编译 判断题 1.计算机的常用输入设备有键盘和鼠标器。( Y ) 2.软盘要远离如电话、录音设备等热源、磁源。...

    delphi 开发经验技巧宝典源码

    0086 用回溯法找出n个自然数中取r个数的所有组合 58 0087 0~N位数的任意组合 59 0088 在数组中快速查找近似值 60 0089 实现直接插入法排序 61 第4章 函数应用 63 4.1 字符串处理函数 64 0090 使用...

    ActionScript开发人员指南中文版

    actionScript 3.0开发人员指南中文版,总共67章,955页。学习actionScript不错的书籍。 目录: 目录 第章:使用日期和时间 管理日历日期和时间 控制时间间隔 ...第章:Adobe图形汇编语言(AGAL) AGAL字节码格式

    JAVA上百实例源码以及开源项目

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    JAVA上百实例源码以及开源项目源代码

     使用Java语言编写的一款用于反映颜色变化的面板,也就是大家熟悉的颜色调色板演示程序。原理是初始化颜色选择按钮,然后为颜色选择按钮增加事件处理事件,最后实例化颜色选择器。 Java二进制IO类与文件复制操作...

    你必须知道的495个C语言问题

    6.19 我怎样编写接受编译时宽度未知的二维数组的函数? 6.20 我怎样在函数参数传递时混用静态和动态多维数组? 数组的大小 6.21 当数组是函数的参数时,为什么sizeof不能正确报告数组的大小? 6.22 如何在一...

    C++大学教程,一本适合初学者的入门教材(part2)

    6 机器语言、汇编语言和高级语言 1.7 C语言与C++的历史 1.8 C++标准库 1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 ...

    C++大学教程,一本适合初学者的入门教材(part1)

    6 机器语言、汇编语言和高级语言 1.7 C语言与C++的历史 1.8 C++标准库 1.9 Java、Internet与万维网 1.10 其他高级语言 1.11 结构化编程 1.12 典型C++环境基础 1.13 C++与本书的一般说明 1.14 C++编程简介 ...

    《你必须知道的495个C语言问题》

    C是一门简洁精妙的语言,掌握基本语法容易,真正能够自如运用,就不那么简单了。你难免会遇到各种各样的问题,有些可能让你百思不得其解,甚至翻遍图书馆,也找不到问题的答案。 《你必须知道的495个C语言问题》的...

Global site tag (gtag.js) - Google Analytics