汇编语言 输入一个字符或数字,放到指定寄存器AH中,并显示该数字

data segment
    char db '?'
data ends

stack segment
      db  128 dup ('?')
stack ends 

assume cs:code,ds:data,ss:stack
code segment
start:
    mov ax,data
    mov ds,ax

    mov ah,0    ;进行输入
    int 16h
    mov char,al

    mov ah,2    ;进行输出
    mov dl,char
    int 21h

    mov ax,4ch
    int 21H
code ends
end start

以下是汇编语言代码,用于输入字符串并显示数字和字母的个数: ``` .model small .stack 100h .data strInput db 100,?,100 dup('$') ;定义一个最大长度为100的字符串 strOutput db 'The input string contains ',?, ' letters and ',?, ' numbers.', '$' .code mov ax, @data mov ds, ax ;输出提示信息 mov ah, 09h lea dx, msg1 int 21h ;读取输入字符串 mov ah, 0ah lea dx, strInput int 21h ;计算字母和数字的个数 xor bx, bx ;bx用来计数字母的个数 xor cx, cx ;cx用来计数数字的个数 mov si, offset strInput+2 ;si指向字符串的第一个字符 mov cl, [strInput+1] ;获取字符串的长度 mov ch, 0 ;ch清零 cld ;df标志位清零,表示字符串的移动方向为正向 mov bl, 0 ;bl计数器清零 mov bh, 0 ;bh计数器清零 mov dl, '0' ;dl为数字0的ASCII码 L1: lodsb ;从si指向的内存地址读取一个字节到al,并将si指向下一个字节 cmp al, '0' ;比较al和字符'0' jb L2 ;如果al小于'0',跳转到L2 cmp al, '9' ;比较al和字符'9' ja L3 ;如果al大于'9',跳转到L3 inc cx ;字符个数加1 cmp al, dl ;比较al和数字0的ASCII码 jb L4 ;如果al小于数字0的ASCII码,跳转到L4 cmp al, '9' ;比较al和字符'9' ja L4 ;如果al大于字符'9',跳转到L4 inc bx ;数字个数加1 jmp L4 L2: inc ch ;ch计数器加1 jmp L4 L3: inc bh ;bh计数器加1 L4: loop L1 ;循环处理字符的所有字符 ;将字母和数字个数转化为字符串 mov al, bl add al, '0' mov [strOutput+21], al mov al, bh add al, '0' mov [strOutput+25], al mov al, cl add al, '0' mov [strOutput+27], al mov al, ch add al, '0' mov [strOutput+31], al ;输出结果 mov ah, 09h lea dx, strOutput int 21h mov ah, 4ch int 21h msg1 db 'Please enter a string:', '$' end ``` 以上代码,使用了lodsb指令将字符的一个字符读取到al寄存器,并使用loop指令循环处理字符的所有字符。在处理过程,使用了计数器bx和cx分别计数数字和字母的个数,并且使用了ASCII码来判断一个字符是否为数字或字母。最后,将计数器数字转换为字符并输出结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值