汇编:系统调用
2021/7/5 22:21:01
本文主要是介绍汇编:系统调用,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
试设计一程序,该程序从键盘输入一个字符串,输入的字符串最大允许 15 个字符且以回车字符结束(15 个字符含回车符)。同时,如果输入的字符串中有数字字符,则将数字字符删除,并新起一行显示处理后的字符串。
以下是定义好的数据段和堆栈段:
data segment maxlen db 15;0AH 子功能入口参数,指定最大字符数 inputlen db 0;0AH 子功能出口参数,返回实际输入的字符数 str1 db 15 dup(0);0AH 子功能的字符串缓存区 str2 db 15 dup(0);09H 子功能的字符串缓存区 data ends stack1 segment stack dw 40h dup(0) stack1 ends
提示:
1、如何实现光标新起一行的功能:回车符和换行符搭配使用;
2、数值字符的 ASCII 码范围为 30H~39H。
源代码
assume cs:code, ds:data, ss:stack1 data segment maxlen db 15;0AH子功能入口参数,指定最大字符数 inputlen db 0;0AH子功能出口参数,返回实际输入的字符数 str1 db 15 dup(0);0AH子功能的字符串缓存区 in str2 db 15 dup(0);09H子功能的字符串缓存区 out data ends stack1 segment dw 40h dup(0) stack1 ends code segment start: ; set segment registers: mov ax, data mov ds, ax mov ax, stack1 mov ss, ax mov sp, 80h ;从键盘输入一个字符串,输入的字符串最大允许15个字符且以回车字符结束(15个字符含回车符)。 lea dx, maxlen mov ah, 0ah int 21h ;调用字符串处理的子程序 call denum ;新起一行 回车换行 mov dl, 0dh mov ah, 2 int 21h mov dl, 0ah mov ah, 2 int 21h ;显示处理后的字符串 lea dx, str2 mov ah, 09h int 21h mov ax, 4c00h ; exit to operating system. int 21h denum: ;要使用的寄存器入栈 push cx push di push si push ax ;设置被处理串以及存储串的地址 mov si, offset str1 mov di, offset str2 ;记录处理串的长度(循环次数) mov cl, [inputlen] mov ch, 0 ;遍历输入字符串,将数字字符删除,存到str2 lop: ;若非数字,跳到a mov al, 30h cmp [si], al ;小于30h jb store mov al, 39h cmp [si], al ;大于39h ja store continue: inc si loop lop mov [di], '$' ;恢复寄存器 pop ax pop si pop di pop cx ret store: mov al, [si] mov [di], al inc di jmp continue code ends end start ; set entry point and stop the assembler.
结果
这篇关于汇编:系统调用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南