汇编语言子程序设计题目:

题目要求:

在这里插入图片描述

实现代码:

DATAS SEGMENT
;此处输入数据段代码  
MIN DW 15
MAX DW 40
shi db 10
asc db ?
geshu db ?
int1 DW ?
shuru DB 'Please input a string(15 <= string <= 40):$'
len DB 'The length of the string is :$'
error DB 'Warning error!$'
num DB 'The number of non letters in the string :$'
largest DB 'The largest ASCII in the string :$'
dao DB 'String output in reverse order is :$'
daoxu DB 'Please enter an int :$'

buf DB 30h
	DB 0
	DB 30H DUP(0)
DATAS ENDS

enterline macro  ;宏定义,完成回车换行
mov dl,13;回车
mov ah,2
int 21h
mov dl,10;换行
mov ah,2
int 21h
endm

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov dx,offset shuru 
mov ah,9
int 21h   ;输出开头

mov dx,offset buf
mov ah,10
int 21h             ;输入字符串
enterline

xor dx,dx
mov bl,buf+1
mov geshu,bl
;bl里面放的是字符串长度的数值
mov dl,geshu

cmp dx,MIN     ;判断溢出
jb stop
cmp dx,MAX
ja stop	

mov dx,offset len 
mov ah,9
int 21h
;将bl里面的数值转为ascii
;子程序输出位数
call weishu	;位数子程序
enterline

mov dx,offset num 
mov ah,9
int 21h

call panduan	;判断里面非字母的个数

;输出非字母的个数 在dl里面
mov bl,dl
call weishu

enterline;输出最大ascii
mov dx,offset largest 
mov ah,9
int 21h

mov dl,asc
mov ah,2
int 21h

;倒序
enterline
mov dx,offset dao 
mov ah,9
int 21h 

mov bl,geshu
mov si,bx
mov cx,bx;cx里面放的int和个数
next4:
mov dl,buf[si+1]
mov ah,2
int 21h
dec si
dec cx
cmp cx,0
jne next4

;int输入倒序
enterline
mov dx,offset daoxu 
mov ah,9
int 21h
enterline


xor bx,bx
input:			;输入字符 转为 数字
mov ah,1H   ;在al里面
int 21H	
		
cmp al,13  ;与空格比较如果
jz next5	;输入结束

SHL bx,1	;bx = bx *2
mov cx,bx
SHL cx,1
SHL cx,1	;cx = bx *2*2*2
add bx,cx	;bx = bx *10  完成bx * 10 

XOR cx,cx	;清零cx
mov cl,al
sub cl,30H
add bx,cx	;num存在bx里面

jmp input

next5:	

mov cx,bx;cx里面放的int和个数
mov bl,geshu
mov si,bx
next6:
mov dl,buf[si+1]
mov ah,2
int 21h
dec si
dec cx
cmp cx,0
jne next6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 
jmp stop1



;子程序	
weishu proc;位数子程序
xor ax,ax
mov al,bl
div shi			;/10

xor dx,dx
mov dl,al		;商
mov dh,ah		;余数放到dh,防止被破坏
add dl,30h
mov ah,2
int 21h;十位
mov dl,dh
add dl,30h
mov ah,2
int 21h;个位
ret
weishu endp
;子程序2——判断
panduan proc
xor cx,cx
mov dl,0	;dl里面是非字母的个数 
mov cl,geshu;cl是放总共的字符串的个数的
mov si,0	;si跟dh比较
 mov asc,0	;找asc最大的
next:
mov bl,buf[si+2]

cmp asc,bl;找最大的asc
 jae next2
 mov asc,bl;asc小于bl
next2:

cmp bl,40h
jb dljia
cmp bl,5bh
jb dlbujia
cmp bl,60h
jb dljia
cmp bl,7bh
jb dlbujia

dljia:inc dl
dlbujia:
inc si
cmp si,cx
jnz next
ret
panduan endp		;;panduan   end


stop:    
mov dx,offset error 
mov ah,9
int 21h   ;输出错误提示	

stop1:   	
MOV AH,4CH
INT 21H    
CODES ENDS
END START

示例

在这里插入图片描述
如果喜欢我的文章就给我点赞吧
(以后还会不定时更新汇编语言,java,数字结构的题目的哦!)

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值