如何用汇编语言实现字符串的输出。

如何用汇编语言实现字符串的输出。,第1张

代码如下:

int main()

{

float r,h,s

scanf("%f",&r);

scanf("%f",&h)

s=2*3.1415926*r*r+2*3.1415926*r*h

printf("表面积是%f\n",s)

return 0

}

扩展资料

在C语言中,有两个函数可以在控制台(显示器)上输出字符,它们分别是:

puts():输出字符串并自动换行,该函数只能输出字符串。

printf():通过格式控制符%s输出字符串,不能自动换行。除了字符串,printf() 还能输出其他类型的数据。

注意,输出字符串时只需要给出名字,不能带后边的[ ]。

1、输入输出字符串

调用21号中断的0ah和09h号功能,可以实现字符串的输入输出

输入字符串,调用0ah号功能

需要注意的是,中断功能的调用大多是有一些约定的,基本上都是通过固定的寄存器传值

拿21h中断的0ah中断来说,这个功能是实现输入字符串的,在此之前首先要提供一个变量存放输入的字符串,这个变量的定义方式是有要求的,如下:

buffer db 50, ?, 50 dup('$')

//db表示定义字节大小,第一个50表示想要定义一个50字节大小的变量(申请空间),?表示一个未定义的值,它会记录输入字符串的实际长度,

//后面表示连续定义50个字节,用来存放输入的字符串的。至于为什么要定义为'$',这是因为'$'是字符串约定的结尾符号,输出的时候检测到这个符号就代表一个字符串结束。

//上面完成了定义一个变量(申请空间),用来存放输入的字符,下面还需要把这个变量的偏移地址给dx寄存器,才可以调用0ah号功能,段地址默认为ds就不需要改了

lea dx, buffer 送偏移地址

mov ah,0ah 将0ah放入ah

int 21h 输入字符串功能调用

//下面介绍输出字符串功能,相对输入来说输出字符串要简单些

/*同样要有一个变量,将变量的地址放入ds:dx,然后调用09h号功能8*/

outputstr db 'hello world',0dh,0ah,'$'

//0dh,0ah分别是回车换行的ascii码,加到字符串后面表示换到下一行行首,'$'为结束标志

lea dx outputstr 送偏移地址

mov ah, 09h 将09h放入ah

int 21h 输出字符串功能调用

登录后复制

一个示例

下面咱们在dosbox下实验下,代码如下

功能是将输入的字符串在下一行输出

stack segment stack

stack ends

data segment

buffer db 50, ?, 50 dup('$')

next_row db 0dh,0ah,'$'

data ends

code segment

assume cs:code, ds:data, ss:stack

start: mov ax, data

mov ds, ax

lea dx, buffer 输入字符串

mov ah, 0ah

int 21h

lea dx, next_row 换行

mov ah, 09h

int 21h

mov dx, offset [buffer+2] 输出字符串,注意起始地址

mov ah, 09h

int 21h

mov ah, 4ch

int 21h

code ends

end start

登录后复制

编译、连接、然后执行

2、输入输出字符(数字)

其实输入输出数字都是通过输入输出字符实现的,准确的说,我们在屏幕上输入输出的只是某个数字(0-9)的ASCII码值(对应30H-39H),而8086的21H号中断提供了输入输出字符的功能。21h号中断要配合ah使用,将功能号放在ah中,再通过int 21h调用

2.1 输入输出字符

1号功能,输入字符

//1号功能,输入字符,输入字符的ascii码放在al中

mov ah, 1

int 21h

//2号功能,输出字符,要输出的字符放在dl中

mov dl 31h //31h,即1的ASCII码

mov ah 2

int 21h

登录后复制

2.2 输入输出数字

其实输入输出数字本质上也就是输入输出字符(串),我们输入或输出的只是ASCII码值,要得到实际的数值,还要经过转换。除此之外,数据的大小(位数)也是受限制的,16位数二进制寄存器能保存的无符号数范围为0~65535,有符号数为-32768 ~ 32767,如果是用八位寄存器,可保存的数范围就更小了。

这里都以有符号的16位为前提讨论

一个比较完善的输入十进制数的处理流程如下:

① 调用21号中断的1号功能输入一个字符

② 判断输入字符的正负,负数,设置标记,正数继续下面步骤

③ 判断输入是否合法(是否为0 - 9),或结束;若非法,提示重新输入,若结束,保存结果,否则继续下一步

④ 将ASCII码值转为数值

⑤ 将已经得到的内容乘以10,加上本次输入的数值

⑥ 转①

首先你需要将a中的十进制数据转换成ASCII码的形式储存

然后可以用bios中断,或者dos中断,推荐用dos中断

方法一:(显示字符串)

mov

ah,09h

21h中断的09h功能:显示字符串

lea

dx,a

dx指向要输出字符串的首地址

int

21h

调用21h号中断

方法二:(显示单个字符)

mov

cl,n

循环准备,n为要显示的字符总数

l1:

mov

ah,02h

mov

dl,(待显示字符的ASCII码)

int

21h

loop

l1


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11616199.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存