微机原理常考简单实验第(一)弹~

本文详细介绍了微机原理中的几个常见汇编程序实验,包括统计16位二进制数1的个数、求双字节数值的绝对值、查找数组最大值、字符输入反转显示、双字左移、三个数的和计算以及寻找并显示数组中的最小值。
摘要由CSDN通过智能技术生成
以下展示微机原理常考实验。
正文开始:

一,下面程序段是统计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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值