汇编:系统调用

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.

结果



这篇关于汇编:系统调用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程