汇编基础习题
题1
编写一个程序,计算的值。其中X、Y、Z均为16位带符号数,要求表达式的计算结果存放在数据段的RESULT单元中。
DATA SEGMENT
X DW 2H
Y DW 44H
Z DW 8H
RESULT DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV AX,X
MOV BX,Y
IMUL BX ;有符号乘
SBB AX,Z ;借位减
IDIV X ;有符号除
MOV RESULT,AX
JMP $
CODE ENDS
END START
题2
设某班学生(10名)某门课程的成绩存放在内存中,试编程统计90分以上、80-89分、70-79分、60-69分、低于60分的学生人数,并分别存放到A、B、C、D、E单元中。
DATA SEGMENT
TAB DB 60,70,80,90,77,88,76,69,74,58 ;10个学生成绩
A DB 0H
B DB 0H
C DB 0H
D DB 0H
E DB 0H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET TAB ;初始化指针
MOV CX,10 ;设置计数器初值
SELECT:
MOV AL,[BX]
CMP AL,90 ;大于等于90
JGE G1
CMP AL,80 ;大于等于80
JGE G2
CMP AL,70 ;大于等于70
JGE G3
CMP AL,60 ;大于等于60
JGE G4
JMP G5 ;其他
G1:
INC A
JMP ENDLOOP
G2:
INC B
JMP ENDLOOP
G3:
INC C
JMP ENDLOOP
G4:
INC D
JMP ENDLOOP
G5:
INC E
JMP ENDLOOP
ENDLOOP:
INC BX ;指针移动 + 1
LOOP SELECT
JMP $
CODE ENDS
END START
题3
用主程序、子程序结构实现判断textdata(10个单元)中的数据是否为“0”~“F”的ASCII码。若是,用十六进制数覆盖原单元,否则用0FFH覆盖原单元。
DATA SEGMENT
TEXTDATA DB 03h,30h,35h,41h,46h,57h,78h,91h,01h,02h ;10个参数
RUSTDATA DB 10 DUP(?)
DO DB ?
NUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START PROC
MOV AX,DATA
MOV DS,AX
MOV BX,OFFSET TEXTDATA ;初始化指针
MOV SI,OFFSET RUSTDATA
MOV CX,10 ;设置计数器初值
SELECT:
MOV AL,[BX]
CALL CHECK
MOV [BX],AL
MOV [SI],AL
INC BX ;指针移动 + 1
INC SI ;指针移动 + 1
LOOP SELECT
JMP $
START ENDP
;子程序
CHECK PROC
CMP AL,'0'
JGE CEK ;判断AL >= '0'
JMP WRONG
CEK:
CMP AL,'F'
JLE RIGHT ;判断AL <= 'F'
JMP WRONG
RIGHT:
RET
WRONG:
MOV AL,0FFH
RET
CHECK ENDP
CODE ENDS
END START
网友评论