data segment
msg1 db "please input the length of string:",0ah,0dh,"$"
buffer1 db 3, ?, 3 dup(?)
msg2 db "please input string",0ah,0dh,"$"
buffer2 db 10,?,10 dup(?)
data ends
code segment
assume cs:code, ds:data
start:
mov ax, data
mov ds,ax
;output msg1
lea ax, msg1
mov dx, ax
mov ah, 09
int 21h
;accept buffer1
lea ax, buffer1
mov dx, ax
mov ah, 0ah
int 21h
;output msg2
lea ax, msg2
mov dx, ax
mov ah, 09h
int 21h
;accept string
lea ax, buffer2
mov dx, ax
mov ah, 0ah
int 21h
;exchang max to min
mov ah ,00h
mov al, 2[buffer1]
sbb ax,30H
mov cx, ax
lea bx, buffer2[2]
;循环改变大小写
exchang:
mov al, [bx]
xor al, 00100000b ;观察大写字母和小写字母的ASIIC得知
mov [bx], al
inc bx
loop exchang
mov ah ,00h
mov al, 2[buffer1]
sbb ax,30H
mov cx, ax
lea bx, 2[buffer2]
;循环输出
output:
mov dl, [bx]
mov ah, 02h
int 21h
inc bx
loop output
mov ax, 4c00h
int 21h
code ends
end start
————————————————————————————————————————————————————————————
这个有点没看懂
code segment ;代码段
assume cs:code,ds:code
org 100h ;从100h开始
start:jmp begin ;跳到begin
p1 db 100
p2 db 0
array db 100h dup(?) ;置100个字节的缓冲区存放数据
begin:
lea bx,array ;将array的首地址给bx
mov ax,cs ;置cs-->ds
mov ds,ax
mov dx,offset p1 ;将p1的偏移量给dx
mov ah,0ah ;调用中断21的0a号功能从键盘接收字符
int 21h
xor bx,bx ;将bx清零
mov bl,p2 ;p2-->bl
mov array[bx],'$' ;送'$'至字符串尾
mov di,0ffffh ;-1-->di
next: inc di ;di自加
cmp array[di],'$' ;比较
je exit ;相等,则跳到exit执行
cmp array[di],41h ;(A~Z-->41h-5ah a~z-->61h-7ah)与a比较
jl exit ;小于,则跳
cmp array[di],5ah ;与z比较
jg next1 ;大于,则跳
add array[di],20h
jmp next ;加20h,大写转小写
next1:
cmp array[di],'$' ;比较
je exit ;相等,则跳到exit执行
cmp array[di],61h ;(A~Z-->41h-5ah a~z-->61h-7ah)与A比较
jl exit ;小于,则跳
cmp array[di],7ah ;与Z比较
jg exit ;大于,则跳
sub array[di],20h
jmp next ;减20h,小写转大写
disp:
loop next
exit: mov p1,0dh ;回车换行
mov p2,0ah
mov ah,09h
int 21h
mov ah,4ch ;程序结束
int 21h
code ends
end begin