1-1.将存放在数据段中的变量VAR1中的三个数,传送到该段中的变量VAR2中。
DATA SEGMENT
VAR1 DW 35,24,0451H
VAR2 DW 3DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
LEA SI,VAR1
LEA DI,VAR2
MOV AX,[SI]
MOV [DI],AX
ADD SI,2
ADD DI,2
MOV AX,[SI]
MOV [DI],AX
ADD SI,2
ADD DI,2
MOV AX,[SI]
MOV [DI],AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
1-2.将存放在数据段STR1的字符串“ABCDEF”传送到该段的STR2储存区中,
DATA SEGMENT
STR1 DB “ABCDEF”
STR2 DB 6 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
LEA SI, STR1
LEA DI, STR2
REST: MOV AL,[SI]
MOV [DI],AL
INC SI
INC DI
DEC CX
JNZ REST
MOV AH,4CH
INT 21H
CODE ENDS
END START
2-1.从键盘输入一个数字就会自动输出两个相同的数字。
DSEG SEGMENT
STRBUF DB 10 DUP(?)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV CX,10
MOV DI,0
REST:MOV AH,01H
INT 21H
MOV STRBUF[DI],AL
MOV DL,AL
MOV AH,02H
INT 21H
INC DI
LOOP REST
MOV AH,4CH
INT 21H
CSEG ENDS
END START
2-2.程序示例:从键盘输入10个数字,并且存入STRBUF缓冲区中,并将这十个字符显示。
DSEG SEGMENT
STRBUF DB 10DUP(?)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START: MOV AX,DSEG
MOV DS,AX
MOV CX,10
MOV DI,0
RSET: MOV AH,01H
INT 21H
MOV STRBUF[DI],AL
MOV DL,AL
MOV AH,02H
INT 21H
INC DI
LOOP REST
MOV AH,4CH
INT 21H
CSEG ENDS
END START
3-1.将实验一中的寄存器间接寻址改为寄存器直接寻址。并将实验二中的寄存器相对寻址改为基址变址寻址。
实验一:
DATA SEGMENT
VAR1 DW 35,24,0451H
VAR2 DW 3 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:MOV AX,DATA
MOV DS,AX
MOV DI,0
MOV AX,VAR1[DI]
MOV SI,0
MOV VAR2[SI],AX
ADD SI,2
ADD DI,2
MOV AX,[SI]
MOV [DI],AX
ADD SI,2
ADD DI,2
MOV AX,[SI]
MOV [DI],AX
MOV AH,4CH
INT 21H
CODE ENDS
END START
实验二:
DSEG SEGMENT
STRBUF DB 10 DUP(?)
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,DSEG
MOV DS,AX
MOV CX,10
MOV DI,0
REST:MOV AH,01H
INT 21H
LEA BX,STRBUF
MOV SI,DI
MOV [BX][SI],AL
MOV DL,AL
MOV AH,02H
INT 21H
INC DI
LOOP REST
MOV AH,4CH
INT 21H
CSEG ENDS
END START
3-2.完成将一个一位十进制数转换成ASCⅡ码存入单元ASC中。
DATA SEGMENT
TAB DB 40H,79H,24H,30H,19H
DB 12H,02H,78H,00H,18H
DEN DB 6
NUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:MOV AX,DATA
MOV DS,AX
LEA BX,TAB
MOV AL,DEN
XLAT
MOV NUM,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
4-1.计算(X+(Y*Z-100))/W
其中:X,Y,Z,W均为十六位有符号数,其储存形式如下,
X DW -13
Y DW 30
Z DW 24
W DW 50
DSEG SEGMENT
X DW -13
Y DW 30
Z DW 24
W DW 50 。
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,Y
IMUL Z
MOV CX,AX
MOV BX,DX
MOV AX,X
CWD
ADD CX,AX
ADC BX,DX
SUB CX,100
CWD
SUB AX,CX
SBB DX,BX
IDIV W
CSEG ENDS
END START
4-2.设X,Y,Z均为双精度数,它们分别存在X,X+2,Y,Y+2,Z,Z+2储存单元中,存放时高位字存放在高地址,低位字存放在低地址,编写程序实现下面表达式的计算:X+(Y-Z)=W
DSEG SEGMENT
X DW -13,-13
Y DW 30,30
Z DW 24,24
W DW 50,50
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
START:MOV AX,X
MOV DX,X+2
ADD AX,Y
ADC DX,Y+2
SUB AX,Z
SBB DX,Z+2
MOV W,AX
MOV W+2,DX
CSEG ENDS
END START
5-1.、编写完整程序,从键盘输入一个字符串STRING,同时,把字符串 STRING中的‘&’字符用空格符替代.
EXDATA SEGMENT
STRING DB 8 DUP(?)
ADDR DW ?
DC DB '?','?'
EXDATA ENDS
CODE SEGMENT
ASSUME ES:EXDATA,CS:CODE
START:MOV AX,EXDATA
MOV ES,AX
MOV CX,8
MOV DI,0
AGAIN:MOV AH,01H
INT 21H
MOV STRING[DI],AL
INC DI
LOOP AGAIN
LEA DI,STRING
MOV CX,8
CLD
MOV AL,'&'
REPNZ SCASB
MOV AL,' '
XCHG AL,STRING[DI-1]
MOV SI,0
MOV BX,8
SUB BX,CX
MOV ADDR,BX
MOV CX,8
REST: MOV AH,02H
MOV AL,STRING[SI]
MOV DL,AL
INT 21H
INC SI
LOOP REST
ADD BX,30H
AND BX,00FFH
MOV DX,BX
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
5-2.编写完整程序,从键盘输入两串字符OLDS和NEWS,如果两个字符串相同显示“YES”串,不同显示“NO”串。
data segment
olds db 8 DUP(?)
news db 8 DUP(?)
yes db 'yes$'
no db 'no$'
data ends
code segment
assume cs:code,ds:data
start:
mov ax,data
mov ds,ax
mov di,0
mov cx,8
again1:
mov ah,01h
int 21h
mov olds[di],al
inc di
loop again1
mov di,0
mov cx,8
again2:
mov ah,01h
int 21h
mov news[DI],AL
inc di
loop again2
mov cx,8
xor si,si
a0003: mov bl,olds[si]
cmp bl,news[si]
jne a0002
inc si
loop a0003
mov dx,offset yes
mov ah,09h
int 21h
jmp a0001
a0002: mov dx,offset no
mov ah,09h
int 21h
a0001:
mov ah,4ch
int 21h
code ends
end start
6-1. 数组ARRAY存放着10个字数据,求数组的最大数和最小数,并分别存放在变量MAX和MIN中。
DAT SEGMENT
BB DW 0AH
ARRAY DW 03H,04H,05H,06H,01H,0AH,0FH,01H,0BH,02H
MAX DW ?
MIN DW ?
DAT ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DAT
START: MOV AX,DAT
MOV DS,AX
XOR AX,AX
MOV CX,BB
MOV BX,OFFSET ARRAY
MOV AX,[BX]
LOOP: ADD BX, 2
CMP AX,[BX]
JAE NEXT
MOV AX,[BX]
NEXT: DEC CX
JNE LOOP
MOV MAX,AX
XOR DX,DX
MOV CX,BB
MOV BX,OFFSET ARRAY
MOV DX,[BX]
LOOP2: ADD BX, 2
CMP DX,[BX]
JBE AA
MOV DX,[BX]
AA : DEC CX
JNE LOOP2
MOV MIN, DX
MOV AH, 4CH
INT 21H
CODE ENDS
END START
7-1. 数组ARRAY有10个带符号数,数的类型是字,编写程序,将数组按升序进行排列,并显示排序结果。
DATA SEGMENT
NUM DW 5,7,1,8,0,9,4,3,2,6
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
MOV CX,9
AGAIN1: MOV SI,0
MOV DI,CX
AGAIN2: MOV AX,NUM[SI]
CMP AX,NUM[SI+2]
JLE CONTINUE
XCHG AX,NUM[SI+2]
MOV NUM[SI],AX
CONTINUE:ADD SI,2
LOOP AGAIN2
MOV CX,DI
LOOP AGAIN1
MOV SI,0
MOV CX,10
AGAIN3: MOV DX,NUM[SI]
ADD DX,30H
ADD SI,2
MOV AH,02H
INT 21H
LOOP AGAIN3
MOV AH,4CH
INT 21H
CODE ENDS
END START
8-1统计学生成绩,设有20个学生成绩,是编写程序分别统计。
DATA SEGMENT
WE DB 45,65,67,85,84,93,49,96,100,74
DB 75,85,82,58,90,100,75,85,90,91
C0 DB 0
C1 DB 0
C2 DB 0
C3 DB 0
C4 DB 0
C5 DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV SI,0
MOV CX,20
AS: MOV AL,WE[SI]
CMP AL,60
JB S1
CMP AL,70
JB S2
CMP AL,80
JB S3
CMP AL,90
JB S4
CMP AL,100
JB S5
INC C0
JMP EXIT
S1: INC C1
JMP EXIT
S2: INC C2
JMP EXIT
S3: INC C3
JMP EXIT
S4: INC C4
JMP EXIT
S5: INC C5
JMP EXIT
EXIT: INC SI
LOOP AS
MOV AH,4CH
INT 21H
CODE ENDS
END START
8-2显示月份,要求根据用户键入的月份数终端上显示该月的英文缩写。
DATA SEGMENT
JAN DB 'JAN$'
FEB DB 'FEB$'
MAR DB 'MAR$'
APR DB 'APR$'
MAY DB 'MAY$'
JUN DB 'JUN$'
JUL DB 'JUL$'
AUG DB 'AUG$'
SEP DB 'SEP$'
OCT DB 'OCT$'
NOV DB 'NOV$'
DEC1 DB 'DEC$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,5
A: MOV AH,01H
INT 21H
SUB AL,30H
CMP AL,1
JZ S1
CMP AL,2
JZ S2
CMP AL,3
JZ S3
CMP AL,4
JZ S4
CMP AL,5
JZ S5
CMP AL,6
JZ P6
CMP AL,7
JZ P5
CMP AL,8
JZ P2
CMP AL,9
JZ P1
MOV BX,10
MOV AX,0
B: PUSH AX
CMP AL,0DH
JZ EXIT
SUB AL,30H
MOV CL,AL
MOV CH,0
POP AX
MUL BX
ADD AX,CX
JMP B
CMP AL,10
JZ P7
CMP AL,11
JZ P4
CMP AL,12
JZ P3
P1: JMP S9
P2: JMP S8
P4: JMP S11
P5: JMP S7
P6: JMP S6
P7: JMP S10
P3: JMP S12
EXIT: POP AX
MOV AH ,4CH
INT 21H
LOOP B
S1: LEA DX,JAN
MOV AH,9
INT 21H
JMP OVER
S2: LEA DX,FEB
MOV AH,9
INT 21H
JMP OVER
S3: LEA DX,MAR
MOV AH,9
INT 21H
JMP OVER
S4: LEA DX,APR
MOV AH,9
INT 21H
JMP OVER
S5: LEA DX,MAY
MOV AH,9
INT 21H
JMP OVER
S6: LEA DX,JUN
MOV AH,9
INT 21H
JMP OVER
S7: LEA DX,JUL
MOV AH,9
INT 21H
JMP OVER
S8: LEA DX,AUG
MOV AH,9
INT 21H
JMP OVER
S9: LEA DX,SEP
MOV AH,9
INT 21H
JMP OVER
S10: LEA DX,OCT
MOV AH,9
INT 21H
JMP OVER
S11: LEA DX,NOV
MOV AH,9
INT 21H
JMP OVER
S12: LEA DX,DEC1
MOV AH,9
INT 21H
JMP OVER
OVER: MOV AH,4CH
INT 21H
CODE ENDS
END START
9-1从键盘输入10个十进制数,存入BUFFER缓冲区中,计算10个数的和,并用十进制数显示和。
DATA SEGMENT
BUFFER DW 10 DUP(?)
MEMORY DB 5 DUP(?)
SUM DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV CX,10
MOV DI,OFFSET BUFFER
MOV SI,OFFSET MEMORY
MOV BL,0
INNUM:
MOV AH,01H
INT 21H
CMP AL,0DH
JZ TENTOTWO
MOV [SI],AL
INC SI
INC BL
JMP INNUM
TENTOTWO:
MOV SI,OFFSET MEMORY
CALL FAR PTR DTOBIN
MOV [DI],AX
ADD DI,2
CALL FAR PTR NEWLINE
MOV BL,0
MOV SI,OFFSET MEMORY
LOOP INNUM
MOV DI,OFFSET BUFFER
MOV CX,10
MOV AX,0
JIAHE:
ADD AX,[DI]
ADD DI,2
LOOP JIAHE
MOV SUM,AX
MOV SI,OFFSET MEMORY
MOV AX,SUM
CALL FAR PTR BTOD
EXIT:
MOV AH,4CH
INT 21H
CODE ENDS
CODE2 SEGMENT
ASSUME CS:CODE2
NEWLINE PROC FAR
PUSH AX
PUSH DX
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
POP DX
POP AX
RET
NEWLINE ENDP
DTOBIN PROC FAR
PUSH CX
XOR AX,AX
MOV CL,BL
XOR CH,CH
REST:
MOV BX,10
MUL BX
MOV DL,[SI]
INC SI
AND DL,0FH
XOR DH,DH
ADD AX,DX
LOOP REST
POP CX
RET
DTOBIN ENDP
BTOD PROC FAR
XOR DX,DX
MOV CX,0
NEXT:
MOV BX,10
DIV BX
MOV [SI],DL
INC SI
INC CX
CMP AX,0
JZ OK
XOR DX,DX
JMP NEXT
OK:
MOV SI,OFFSET MEMORY
ADD SI,CX
SUB SI,1
PRINT:
MOV DL,[SI]
ADD DL,30H
MOV AH,2
INT 21H
SUB SI,1
LOOP PRINT
RET
BTOD ENDP
CODE2 ENDS
END START
10-1编写一个子程序嵌套结构的程序模块,分别从键盘输入姓名及8个字符的电话号码,并以一定的格式显示出来。
data segment
inbuf db 11,?,11 dup(?)
outname db 11 dup(0d),'$'
outnum db 8 dup(0d),'$'
tablehead db 'name tel.',0dh,0ah,'$'
tishi1 db 'input name$'
tishi2 db 'input num$'
data ends
code segment
assume cs:code,ds:data,es:data
start:
mov ax,data
mov ds,ax
mov es,ax
lea dx,tishi1
mov ah,9
int 21h ;输出提示
call inputname
lea dx,tishi2
mov ah,9
int 21h ;输出提示
call inpone ;显示提示信息input a telephone nmber:
call printline
mov ah,4ch
int 21h;输入姓名
inputname proc near
lea dx,inbuf;输入姓名
mov ah,10
int 21h
mov cl,inbuf+1
mov ch,0
lea si,inbuf+2;将输入的名字存入name
lea di,outname
cld
rep movsb
ret
inputname endp;输入电话号码就
inpone proc near
lea dx,inbuf;输入号码
mov ah,10
int 21h
lea si,inbuf+2;将输入的名字存入name
lea di,outnum
mov cx,8
cld
rep movsb ;将inbuf中的字符串复制到outnumber
ret
inpone endp;输出姓名和电话号码
printline proc near
lea dx,tablehead
mov ah,9
int 21h
lea dx,outname
mov ah,9
int 21h
lea dx,outnum
mov ah,9
int 21h
ret
printline endp
code ends
end start