以下展示微机原理常考实验。
正文开始:
一,下面程序段是统计AX中16位二进制数1的个数,并将结果放在CX中。
DATA SEGMENT
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
XOR AX,AX
L1:AND AX,AX
JZ EXIT
SHL AX,1
JNC L2;
INC CX
L2:JMP L1
EXIT:MOV AH,4CH
INT 21H
CODE ENDS
END START
二, 编写汇编程序,求出双字节数值的绝对值。双字长有符号数在A和A+2单元中,结果存放在B和B+2单元中,设A和B均为字变量。
DATA SEGMENT
A DW A1,A2;两个字(一个双字)
B DW ?,?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DX,AX
MOV AX,A
MOV DX,A+2
CMP DX,0;最高位与0作比较大于0为负数
JNS P1;最高位是0为正数跳P1
NOT AX;低字取反 ;NEG DX
NOT DX;高字取反 ;NEG AX
;SBB DX,0
ADD AX,1;取反末位加1 求绝对值就是求补就是取反末位加1
ADC DX,0;高位假如产生进位--在高位上加上低字的进位位
P1:MOV B,AX
MOV B+2,DX
MOV AH,4CH
INT 21H
CODE ENDS
END START
三,array数组中有八个无符号字节数据,编写完整的汇编语言,将数组中最大值放入MAX单元。
DATA SEGMENT
ARRAY DB 1,12,26,2,6,4,31,76 ;定义8个数据值
MAX DB,?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DX,AX
LEA SI ARRAY
MOV AH,0
MOV CX,8
LL: MOV AL,[SI]
INC SI
CMP AL,AH
JC NEXT
MOV AH,AL
NEXT:
LOOP LL
MOV MAX,AH
MOV AH,4CH
INT 21H
CODE ENDS
END START
另一种比较7次
DATA SEGMENT
ARRAY DB 1,12,26,2,6,4,31,76 ;定义8个数据值
MAX DB,?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DX,AX
LEA SI ARRAY
MOV AL,[SI]
LL: INC SI
CMP AL,[SI]
JAE NEXT
MOV AL,[SI]
NEXT:
LOOP LL
MOV MAX,AL
MOV AH,4CH
INT 21H
CODE ENDS
END START
四,用单个字符输入一号功能调用,然后从键盘输入十个字符,然后用二号功能显示,要求用相反的顺序显示这十个字符,被显示的字符放在DL中。
DATA SEGMENT
ARRAY DB 1,12,26,2,6,4,31,76 ;定义8个数据值
MAX DB,?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DX,AX
LEA BX,A
MOV CX,10
L1: MOV AH,1;一号功能
INT 21H;字符ASCAII码放入AL里假设给一个变量A
MOV [BX],AL
INC BX
LOOP L1
MOV CX,10
L2: MOV DL,[SI]
MOV AH,2 ;二号功能
INT 21H
DEC SI
LOOP L2
LEA SI,A+9
MOV AH,4CH
INT 21H
CODE ENDS
END START
第一段是键盘接收,接收十个存入内存。
第二段是逆向从存的最后一个输出。
另外一种:
MOV AX,DATA
MOV DX,AX
MOV AH,0
MOV CX,10
L1: MOV AH,1;一号功能
INT 21H;字符ASCAII码放入AL里假设给一个变量A
PUSH AX
LOOP L1
MOV CX,10
L2: POP DX
MOV AH,2 ;二号功能
INT 21H
DEC SI
LOOP L2
五,汇编一个双字实现左移4位
;一个双字左移四位
MOV DX,0
MOV AX,0
MOV BX,0
MOV DX,1234H
MOV AX,5678H
MOV CL,04
SHL DX,CL ;对DX左移位DX=2340H
MOV BL,AH ;BL=56H
SHL AX,CL ;AX左移位AX=6780H
SHR BL,CL ;BL右移四位BL=05H
OR DL,BL ;或运算05H+40H=45H
; DX=2345H AX=6780H
;12345678H——>23456780H
六,ABC内存单元分别存放三个数,若三个数都不是0,求ABC的和,若A=0或B=0或C=0,则都清零。
DSEG SEGMENT
A DW 2
B DW 3
C DW 4
D DW 0
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:CSEG,ES:CSEG
MAIN PROC FAR
START:
PUSH DS
SUB AX,AX
PUSH AX
MOV AX,DSEG
MOV DS,AX;给DS赋值
BEGIN:
CMP A,0
JE NEXT
CMP B,0
JE NEXT
CMP C,0
JE NEXT
MOV AX,A
ADD AX,B
ADD AX,C
MOV D,AX
JMP EXIT
NEXT:
MOV A,0
MOV B,0
MOV C,0
EXIT:
RET;设置返回DOS
MAIN ENDP
六,在内存array开始的10个字节单元中依次存放了9,6,11,3,4,2,8,5,7,6字节数据,求最小数并在屏幕显示。
DATA SEGMENT
ARRAY DB 9,6,11,3,4,2,8,5,7,6
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA
START:
MOV CX,9
LEA BX,ARRAY
MOV AL,[BX]
L2:INC BX
CMP AL,[BX]
JLE L1
MOV AL,[BX];Al放最小的数
L1:LOOP L2
MOV DL,AL
ADD DL,30H
MOV AH,2
INT 21H;显示最小的数
r