文档章节

用DOS功能调用实现简单输入输出(汇编)

locusxt
 locusxt
发布于 2014/03/09 21:49
字数 891
阅读 2830
收藏 3

实验目的:掌握在PC机上利用DOS功能调用实现简单输入输出的方法。

实验内容:利用DOS功能调用从键盘输入,转换后在屏幕上显示,具体要求如下:

  1. 如果输入的是字母(A~Z,不区分大小写)或数字(0~9),则将其转换成对应的英文单词后在屏幕上显示,对应关系见下表

  2. 若输入的不是字母或数字,则在屏幕上输出字符“*”

  3. 每输入一个字符,即时转换并在屏幕上显示,需考虑显示结果的清晰美观

  4. 支持反复输入,直到按ESC键退出程序返回DOS命令行

  5. 程序结束时,在屏幕上显示本人的姓名全拼和学号

例:在键盘上输入“U2011/”,对应输出内容为“Uniform two zero one one *”

A

Alpha

N

November

1

one

B

Bravo

O

Oscar

2

two

C

Charlie

P

Papa

3

three

D

Delta

Q

Quebec

4

four

E

Echo

R

Romeo

5

five

F

Foxtrot

S

Sierra

6

six

G

Golf

T

Tango

7

seven

H

Hotel

U

Uniform

8

eight

I

India

V

Victor

9

nine

J

Juliet

W

Whisky

0

zero

K

Kilo

X

X-ray



L

Lima

Y

Yankee



M

Mike

Z

Zulu




;Q2.ASM
;locusxt
;cnjs.zhuting[at]gmail.com

data segment
	myname	db 0dh, 0ah, 'NAME: locusxt', 0dh, 0ah, '$'
	myid	db 'ID: locusxt', 0dh, 0ah, '$'
	a		db 'Alpha', 20h, '$'  ;以下是字母对应的单词
	b		db 'Bravo', 20h, '$'
	c		db 'Charlie', 20h, '$'
	d		db 'Delta', 20h, '$'
	e		db 'Echo', 20h, '$'
	f		db 'Foxtrot', 20h, '$'
	g		db 'Golf', 20h, '$'
	h		db 'Hotel', 20h, '$'
	i		db 'India', 20h, '$'
	j		db 'Juliet', 20h, '$'
	k		db 'Kilo', 20h, '$'
	l		db 'Lima', 20h, '$'
	m		db 'Mike', 20h, '$'
	n		db 'November', 20h, '$'
	o		db 'Oscar', 20h, '$'
	p		db 'Papa', 20h, '$'
	q		db 'Quebec', 20h, '$'
	r		db 'Romeo', 20h, '$'
	s		db 'Sierra', 20h, '$'
	t		db 'Tango', 20h, '$'
	u		db 'Uniform', 20h, '$'
	v		db 'Victor', 20h, '$'
	w		db 'Whisky', 20h, '$'
	x		db 'X-ray', 20h, '$'
	y		db 'Yankee', 20h, '$'
	z		db 'Zulu', 20h, '$'
	zero	db 'zero', 20h, '$'    ;以下是数字对应的单词
	one		db 'one', 20h, '$'
	two		db 'two', 20h, '$'
	three	db 'three', 20h, '$'
	four	db 'four', 20h, '$'
	five	db 'five', 20h, '$'
	six		db 'six', 20h, '$'
	seven	db 'seven', 20h, '$'
	eight	db 'eight', 20h, '$'
	nine	db 'nine', 20h, '$'
	star	db '*', 20h, '$'

	;以下是索引表
	alphabet dw a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p ,q, r, s, t, u, v, w, x, y, z
	num dw zero, one, two, three, four, five, six, seven, eight, nine


data ends

stack segment stack
	sta db 50 dup(?)
	top equ length sta
stack ends

code segment
	assume cs:code, ds:data, ss:stack
	begin:
		mov ax, data
		mov ds, ax
		mov ax, stack
		mov ss, ax
		mov ax, top
		mov sp, ax

	;获取一个按键
	getkey:
		mov ah, 07h
		int 21h

	compare:
		;判断是不是一个小写字母
		cmp al, 'z'
		jg  dispstar
		cmp al, 'a'
		jnl dispalph
		
		;判断是不是大写字母
		cmp al, 'Z'
		jg  dispstar
		cmp al, 'A'
		jnl dispalphc

		;判断是不是数字
		cmp al, '9'
		jg dispstar
		cmp al, '0'
		jnl dispnum
		
		;判断是不是esc
		cmp al, 1bh
		jnz dispstar
		jmp dealesc

	dispalphc:    ;大写字母先加0x20转成小写处理
		add al, 20h
	dispalph:
		sub al, 'a'
		mov ah, 00h
		mov si, ax
		sal si, 01h
		mov bx, offset alphabet
		mov dx, [bx + si]
		mov ah, 09h
		int 21h
		jmp getkey
	
	dispnum:    ;显示一个数字对应的单词
		sub al, '0'
		mov ah, 00h
		mov si, ax
		sal si, 01h
		mov bx, offset num
		mov dx, [bx + si]
		mov ah, 09h
		int 21h
		jmp getkey


	dispstar:    ;显示星号
		mov dx, offset star
		mov ah, 09h
		int 21h
		jmp getkey

	dealesc:    ;输入esc退出
		mov dx, offset myname
		mov ah, 09h
		int 21h
		mov dx, offset myid
		mov ah, 09h
		int 21h

		mov ax, 4c00h
		int 21h

code ends
	end begin



=========================================
汇编好麻烦。
dosbox好像不支持杀进程,dosbox有linux,mac版。
用masm汇编的时候,后面的文件得是*.asm,tab补全帮我补成*.exe了,调了半天死活一堆error
vim写汇编,可以去官网下个语法高亮的插件。

© 著作权归作者所有

locusxt
粉丝 27
博文 140
码字总数 90989
作品 0
海淀
程序员
私信 提问
Linux 汇编语言开发指南

Linux 汇编语言开发指南 肖文鹏 ( xiaowp@263.net), 北京理工大学计算机系硕士研究生 本文作者 肖文鹏是北京理工大学计算机系的一名硕士研究生,主要从事操作系统和分布式计算环境的研究,喜...

晨曦之光
2012/03/09
797
0
8086汇编语言入门-HelloWorld

80x86微处理器汇编语言编程。学习任何编程语言都免不了要跨越HelloWorld这道坎,面向机器的汇编语言与面向过程/对象的高级语言不同,编码过程中对寄存器、内存的分配等细节都需要编程人员去关...

nhgxxyy198990
2018/04/16
0
0
AT&T的汇编格式&X86内联汇编

AT&T的汇编格式 一 基本语法 语法上主要有以下几个不同. ★ 寄存器命名原则 AT&T: %eax Intel: eax ★源/目的操作数顺序 AT&T: movl %eax,%ebx Intel: mov ebx,eax ★常数/立即数的格式 AT...

AlphaJay
2012/05/18
619
0
汇编语言-第四章 第一个程序

一个源程序从写出到执行的过程 - 编写汇编源程序 - 对源程序进行编译链接 *** 1.使用 汇编语言编译程序对源程序文件中的源程序进行编译,产生目标文件。 2.用链接程序对目标文件进行连接,生...

Frost729
2018/02/09
51
0
80x86的汇编器--NASM

NASM是一个为可移植性与模块化而设计的一个80x86的汇编器。它支持相当多 的目标文件格式,包括Linux和'NetBSD/FreeBSD','a.out','ELF','COFF',微软16 位的'OBJ'和'Win32'。它还可以输出纯二进......

匿名
2008/10/01
33K
0

没有更多内容

加载失败,请刷新页面

加载更多

elasticsearch查询20公里以内的数据并按距离升序排序data es写法

NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();BoolQueryBuilder boolQueryBuilder=new BoolQueryBuilder();//这暂wei加入业务查询条件 queryBuilder.withQue......

为何不可1995
17分钟前
3
0
superset在线pip部署

1、安装依赖sudo yum install gcc libffi-devel python-devel python-pip python-wheel openssl-devel libsasl2-devel openldap-devel报错:没有可用软件包 python-pip。没有可用软件包 ......

阿伦哥-
22分钟前
4
0
photoshop简单使用

PS基本操作与图片格式 photoshop工具 组成 菜单项 工具栏 辅助面板 图片格式 jpg png gif 注: psd photoshop CC链接: https://pan.baidu.com/s/1LVa5R_btSjczLBwskCZidQ 提取码:sc3v 快捷...

studywin
24分钟前
3
0
springboot 整合pageHelper

今天跟大家聊聊springboot整合pageHelp,首先pageHelper是一个缓存式分页,分页步骤如下: 1 pom文件添加依赖 <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelp......

gaofei123
24分钟前
6
0
《DNS攻击防范科普系列1》—你的DNS服务器真的安全么?

DNS服务器,即域名服务器,它作为域名和IP地址之间的桥梁,在互联网访问中,起到至关重要的作用。每一个互联网上的域名,背后都至少有一个对应的DNS。对于一个企业来说,如果你的DNS服务器因...

大涛学弟
25分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部