1.
DSEG SEGMENT
MSGI DB 'please input a string(<=9):$'
BUF DB 9 DUP(?)
COUNT DB ?
MSG0 DB 0DH,0AH,'the number of digit is:$'
DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG
MAIN PROC FAR ;主程序入口
mov ax, dseg
mov ds, ax
LEA SI,BUF
MOV CX,9
LEA DX,MSGI
MOV AH,9
INT 21H
NEXT:
MOV AH,1;键盘输入一个字符
INT 21H
CMP AL,'$';判断该字符是否为结束符
JZ TJ
MOV [SI],AL;将字符存入缓冲区
INC SI
CMP AL,30H;判断该字符是否是数字
JB NEXT1
CMP AL,39H
JA NEXT1
INC COUNT;是数字将个数加1
NEXT1:
LOOP NEXT
TJ:
LEA DX,MSG0
MOV AH,9
INT 21H
MOV DL,COUNT;显示数字字符的个数
ADD DL,30H
MOV AH,2
INT 21H
mov ah,1;按任意键退出
int 21h
mov ax, 4c00h ;程序结束,返回到操作系统系统
int 21h
MAIN ENDP
CSEG ENDS
END MAIN
2.
DSEG SEGMENT
BUF DB 1,2,-3,-4,5,6,-7,8,9
PN DB ?
NN DB ?
MSGP DB 'the number of plus is:$'
MSGN DB 0DH,0AH,'the number of negative is:$'
DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG
MAIN PROC FAR ;主程序入口
mov ax, dseg
mov ds, ax
;此处添加主程序代码
LEA SI,BUF
MOV CX,9
NEXT:
MOV AL,[SI];从数组中取出数据
CMP AL,0;判断该数是正数还是负数
JZ TJ;为零则不统计
JG PLUS;为正转到PLUS
INC NN;是负数将个数NN加1
JMP NEXT1
PLUS:
INC PN;是正数将个数PN加1
NEXT1:
INC SI;指向下一个数据
LOOP NEXT
TJ:
LEA DX,MSGP;显示正数的个数
MOV AH,9
INT 21H
MOV DL,PN
ADD DL,30H
MOV AH,2
INT 21H
LEA DX,MSGN;显示负数的个数
MOV AH,9
INT 21H
MOV DL,NN
ADD DL,30H
MOV AH,2
INT 21H
mov ah,1;按任意键退出
int 21h
mov ax, 4c00h ;程序结束,返回到操作系统系统
int 21h
MAIN ENDP
CSEG ENDS
END MAIN
3.
prognam segment
main proc far
assume cs:prognam
start:
push ds
sub ax,ax
push ax
next: mov dl,0dh
mov ah,2
int 21h ;打印回车
mov dl,0ah
mov ah,2
int 21h
mov ah,01
int 21h ;从键盘输入字符,字符的ascii 码在al寄存器中
mov bl,al ;把输入的字符送bl寄存器
cmp bl,61h
jl r ;如果输入字符的Ascii码小于a的 ascii码退出
jz suc ;如果输入字符等于a,只打印后导字符,不打印前导字符。
cmp bl,7ah
jg r ;如果输入字符的Ascii码大于z的 ascii码退出,即如果输入字符不在 a~z之间就退出
mov dl,bl
dec dl
mov ah,02
int 21h
cmp dl,79h
je next ;比较打印的字符与z是否相同,如果相同只打印前导字符,不打印后导字符,直接从键盘输入下一个字符。
suc: mov dl,bl
inc dl
mov ah,2
int 21h
jmp next ;前导字符和后导字符都打印完了,输入下一个字符打印
r: ret
main endp
prognam ends
end main
4.
DSEG SEGMENT
MSGI DB 'please input a string($ is end):$'
XYZ DB 80 DUP(?)
DSEG ENDS
CSEG SEGMENT
assume cs:CSEG, ds:DSEG
MAIN PROC FAR ;主程序入口
mov ax, dseg
mov ds, ax
;此处添加主程序代码
LEA SI,XYZ
LEA DX,MSGI
MOV AH,9
INT 21H
NEXT:
MOV AH,1;键盘输入一个字符
INT 21H
CMP AL,'$';判断该字符是否为结束符
JZ TJ
cmp al,41h
jl r ;如果输入字符的Ascii码小于A的 ascii码,则不用转换
cmp al,5ah
jg r ;如果输入字符的Ascii码大于Z的 ascii码,则不用转换,即如果输入字符不在 A~Z之间就不用转换
add al,20h;在 A~Z之间就转换为小写
r:
mov [si],al
inc si
jmp next
TJ:
mov ah,1;按任意键退出
int 21h
mov ax, 4c00h ;程序结束,返回到操作系统系统
int 21h
MAIN ENDP
CSEG ENDS
END MAIN