1. 输入HelloWorld,输出helloWorld
data segment
buffer db 20,?,21 dup('$')
data ends
code segment
assume cs:code,ds:data
start:
mov ax,seg buffer
mov ds,ax
mov dx,offset buffer
mov ah,10
int 21h
mov buffer[0],0dh
mov buffer[1],0ah
mov bx,2
add buffer[bx],20h ;将首字母变为小写h
mov ax,seg buffer
mov ds,ax
mov dx,offset buffer
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end start
2.冒泡排序
data segment
stu dw 50,60,70,80,90,80
dw 50,60,70,80,90,80
dw 50,60,70,80,90,80
dw 50,60,70,80,90,80
dw 50,60,70,80,90,80
sign dw ?
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov cx,sign-stu
shr cx,1;元素个数
dec cx ;比较到最后一个元素的前一个
loop1:
push cx;保存外循环次数
mov bx,0
loop2:
mov ax,stu[bx]
cmp ax,stu[bx+2]
jle next;小于等于则跳转互换,升序
xchg ax,stu[bx+2]
mov stu[bx],ax
next:
add bx,2
loop loop2
pop cx;恢复外循环次数
loop loop1
mov ah,4ch
int 21h
code ends
end start
3. 统计班级内60分以下的同学个数存入min数组,90分以上的同学个数放入max数组
data segment
score db 23,22,35,66,90
db 23,60,35,66,95
db 23,22,70,66,91
max db 3 dup(0)
min db 3 dup(0)
sn db 0
cn db 0
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
outs:
cmp cn,3
jae exit ;如果遍历完第三个班级则退出
mov sn,0 ;没有遍历完则从第0个学生开始
ins:
cmp sn,5;是否遍历到班级里的最后一名学生
jae outs1;如果遍历到最后一名则跳到outs1使班级加一
mov al,cn
mov cl,5
mul cl;al=cn*5
mov bx,ax;bx中存的是学生的起始地址
mov al,sn
mov ah,0
mov si,ax;si中存的是第几个学生
cmp score[bx][si],90
jb flunk;如果小于90的话跳到flunk
mov al,cn
mov ah,0
mov di,ax
inc max[di]
jmp ins1
flunk:
cmp score[bx][si],60
jae ins1;如果大于60则跳到ins1
mov al,cn
mov ah,0
mov di,ax
inc min[di]
ins1:
inc sn;学生加一
jmp ins
outs1:
inc cn;班级数加一
jmp outs
exit:
mov ah,4ch
int 21h
code ends
end start
4.,输入X,输出Y=2*X+3
data segment
table dw prog0,prog1,prog2,prog3
mess db 0ah,0dh,'input0-3:$'
buffer db 80,?,80 dup(?)
buffer1 db 'X:$'
buffer2 db 0dh,0ah,'Y=2*X+3=$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
let0:
mov dx,offset mess
mov ah,9
int 21h
mov ah,1
int 21h
and al,03h;保留al最低两位,其余位清零
mov ah,0
shl ax,1;左移一位相当于乘以2
mov bx,ax
jmp table[bx]
prog1: ;输出字符串
mov dl,0ah
mov ah,2
int 21h
lea dx,buffer ;输入字符串
mov ah,10
int 21h
mov bx,1 ;调整buffer
add bl,buffer[bx]
mov bh,0
add bx,2
mov buffer[bx],'$' ;增加结束标志’$‘
mov bx,0
mov buffer[bx],0ah ;换行
mov bx,1
mov buffer[bx],0dh
mov ah,9
int 21h
jmp let0 ;返回菜单
prog2:
mov dl,0ah
mov ah,2
int 21h
lea dx,buffer1
mov ah,9h
int 21h
mov ah,1h
int 21h
sub al,30h
sal al,1
aam ;乘法调整
add al,3h
aaa ;加法调整
add ax,3030h
mov bx,ax
lea dx,buffer2
mov ah,9h
int 21h
mov dl,bh
mov ah,2h
int 21h
mov dl,bl
int 21h
jmp let0
prog3: ;大写转小写
mov dl,0ah
mov ah,2
int 21h
mov ah,1
int 21h
test al,20h
jz let1
and al,0dfh
jmp let2
let1:
or al,20h
let2:
mov dl,al
mov ah,2
int 21h
jmp let0
prog0:
mov ah,4ch
int 21h
code ends
end start
5.输入学生学号,输出学生姓名
data segment
stu0 db 0dh,0ah,'stu0$'
stu1 db 0dh,0ah,'stu1$'
stu2 db 0dh,0ah,'stu2$'
stu3 db 0dh,0ah,'stu3$'
stu4 db 0dh,0ah,'stu4$'
stu5 db 0dh,0ah,'stu5$'
info db 0dh,0ah,'please input a stu number:$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov dx,offset info
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov cl,7
mul cl;ax=al*cl
mov dx,ax
mov ah,9
int 21h
mov ah,4ch
int 21h
code ends
end start