上机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