上机1

代码1

data segment
x db 30
y db 15
z1 db ?
z2 db ?
z3 dw ?
data ends

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

    mov al,x
	add al,y
	mov z1,al
	
	mov al,x
	sub al,y
	mov z2,al
	
	mov al,x
	mul y
	mov z3,ax

	mov ax,4c00h
    int 21h
code ends
end start

代码2

ASSUME cs:code,ds:data
data SEGMENT
    x db 1eh
    y db 0fh;前面补0
    z1 db ?
    z2 db ?
    z3 dw ?
data ENDS

code SEGMENT
start:
    mov ax,data 
    mov ds,ax

    mov al,x
    add al,y
    mov z1,al

    mov al,x
    sub al,y
    mov z2,al

    mov al,x
    mov bl,y
    mul bl
    mov z3,ax

    mov ax,4c00h
    int 21h
code ENDS
END start

代码3

.model small
.data
x db 30
y db 15
z1 db ?
z2 db ?
z3 dw ?

.code
start:
mov ax, @data
mov ds, ax
mov al, x
add al, y
mov z1, al
mov al, x
sub al, y
mov z2, al
mov ah, 0
mov al, x
mul y
mov z3, ax
mov ax, 4c00h
int 21h
end start

代码4

DATA SEGMENT
X DB 30
Y DB 15
Z1 DB ?
Z2 DB ?
Z3 DW ?
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AL,X
ADD AL,Y
MOV Z1,AL
MOV AL,X
SUB AL,Y
MOV Z2,AL
MOV AL,X
MUL Y
MOV Z3,AX
MOV AX,4C00H
INT 21H
CODE ENDS
END START

上机2-1

代码1

.model small
.data
BUT DB 0DH,0AH,'THE RESULT $'
score DB 46,68,88,87,76,89,99,65,100,80
S5 DB 0
S6 DB 0
S7 DB 0
S8 DB 0
S9 DB 0
S10 DB 0
.code
start:

mov ax,@data
mov ds,ax

mov cx,9
mov si,0
lp1:
	mov ah,0
	mov al,score[si]
	mov bl,10
	div bl
	mov bh,0
	mov bl,al
	cmp bl,6
	jge next
	inc s5
	inc si
	dec cx
	cmp cx,0
	jge lp1
	jmp disp
next:
	sub bl,6
	inc s6[bx]
	inc si
	dec cx
	cmp cx,0
	jge lp1
disp:
	lea si,s5
	mov cx,6
	lp2:
		mov dx,offset but
		mov ax,0900h
		int 21h
		mov dl,[si]
		inc si
		add dl,30h
		mov ax,0200h
		int 21h
	loop lp2
mov ax,4c00h
int 21h
end start

代码2

data  SEGMENT
    nums dw 46,68,88,87,76,89,99,65,100,80
    s5 db 30h
    s6 db 30h
    s7 db 30h
    s8 db 30h
    s9 db 30h
    s10 db 30h
    string db 'THE RESULT $'
data ENDS


ASSUME cs:code,ds:data
code SEGMENT

start:
    mov ax,data 
    mov ds,ax
    mov si,0 ;si means source index,use it to get the number in nums
    mov cx,10;loop 10 times

calculate:;loop start here
    mov ax,nums[si]

grade_below_60:
    CMP ax,59
    ja grade_above_60;JA(jump above)大于则转移到目标指令执行
    INC s5
    JMP complete

grade_above_60:
    CMP ax,69
    ja grade_above_70
    INC s6
    JMP complete

grade_above_70:
    CMP ax,79
    ja grade_above_80
    INC s7
    JMP complete

grade_above_80:
    CMP ax,89
    ja grade_above_90
    INC s8
    JMP complete

grade_above_90:
    CMP ax,99
    ja grade_equal_100
    INC s9
    JMP complete

grade_equal_100:
    INC s10
    JMP complete

complete:
    add si,2
    loop calculate

   mov cx,6
   mov si,0 
output:

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

	mov al,s5[si]
	mov dl,al;待显示字符的ASCII码要放到DL里
	mov ah,02H
	int 21H;


    ;换行
	mov ah,02H
	mov dl,0AH
	int 21H

    inc si
    loop output

	mov ah,4CH	
	int 21H	
code ENDS

END start

代码3

.model small
.data ; 定义数据段的内容
a db 46, 68, 88, 87, 76, 89, 99, 65, 100, 80
s5 db 0
s6 db 0
s7 db 0
s8 db 0
s9 db 0
s10 db 0
string db 'THE RESULT $'
.code
start: ; 下面两条语句是将data段与数据段绑定
mov ax, @data
mov ds, ax

mov cx, 10
s:
mov bx, cx
mov bl, a[bx - 1]
cmp bl, 60
jb  x5
cmp bl, 70
jb  x6
cmp bl, 80
jb  x7
cmp bl, 90
jb x8
cmp bl, 100
jne x9
jmp short x10
x5:
inc s5
jmp short next
x6:
inc s6
jmp short next
x7:
inc s7
jmp short next
x8:
inc s8
jmp short next
x9:
inc s9
jmp short next
x10:
inc s10
next:
loop s

mov bl, s5
call print
mov bl, s6
call print
mov bl, s7
call print
mov bl, s8
call print
mov bl, s9
call print
mov bl, s10
call print

mov ax, 4c00h
int 21h

print: ; 参数为 bl ,输出 string,以及 [bl] 所指的数字最后换行
push dx
push ax

mov dx, offset string ;将串的段内地址装入DX
mov ah, 09h ; 调用 DOS的 09h号功能,传入参数 DS:DX=串地址,'$'结束字符串
int 21h

mov dl, 48
add dl, bl
mov ah, 02h
int 21h

mov dl, 10
mov ah, 02h
int 21h

pop ax
pop dx

ret

end start

代码4

.model small
.data
grades db 46,68,88,87,76,89,99,65,100,80 		
n equ $-grades
s5 db ?
s6 db ?
s7 db ?
s8 db ?
s9 db ?
s10 db ?
.code
start:mov ax,@data
mov ds,ax
mov si,0			
mov cx,n
again:mov al,grades[si]
inc si
cmp al,60
jnb p6			
add s5,1
jmp lp
p6:cmp al,70
jnb p7
add s6,1
jmp lp
p7:cmp al,80
jnb p8
add s7,1
jmp lp
p8:cmp al,90
jnb p9
add s8,1
jmp lp
p9:cmp al,100
jnb p10
add s9,1
jmp lp
p10:add s10,1
lp:loop again
mov cx,6
mov di,0			
print:mov dl,[s5+di]		
inc di
add dl,30h
mov ah,02h
int 21h
loop print
mov ax,4c00h
int 21h
end start

上机2-2

代码1

data segment
data ends

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

	mov ah,01H		;输入字母
	int 21H	
	
	cmp al,'a'		;输入不是a--z的退出
	jb exit
	
	cmp al,'z'
	ja exit
	
	mov bl,al		
	sub bl,20H		;计算相应大写字母的ASCII码值
	mov dl,bl		;输出
	mov ah,02H
	int 21H
exit:   
	mov ax,4c00h
    int 21h
code ends
end start

代码2

ASSUME cs:code
code SEGMENT
start:
    mov AH,01H
    int 21H;the input will be saved in al

    CMP al,97
    jb complete
    JMP above_96;大于等于96
	
above_96:
    
	CMP al, 122
    ja complete
    
	sub al,32
    mov dl,al;待显示字符的ASCII码要放到DL里
	
	mov ah,02H
	int 21H;

complete:
	mov ah,4CH	
	int 21H	
    
code ENDS
END start

代码3

.model small
.data ; 
x db ?

.code
start:
mov ax, @data
mov ds, ax
mov ah, 01h
int 21h
mov x, al

cmp al, 'a'
jb over
cmp al, 'z'
ja over
and al, 11011111b  ; sub al, 32
mov dl, al
mov ah, 02h
int 21h

over:
mov ax, 4c00h
int 21h

end start

代码4

.model small
.code
start:mov ah,01h
int 21h
cmp al,41h	
jb exit
cmp al,7ah
ja exit
cmp al,61h
jb upper
sub al,20h
jmp print
upper:cmp al,5ah	;判断是否是字母中间的其他字符
ja exit
jmp print
print:mov dl,al
mov ah,02h
int 21h
exit:mov ah,4ch	
int 21h
end start