【SCAU汇编】实验三

1.BX 中的无符号数以二进制的形式输出。

CODES SEGMENT
    ASSUME CS:CODES
MAIN PROC FAR
    MOV CX,16
L1:
    ROL BX,1
    MOV DL,30H
    ADC DL,0
    MOV AH,2
    INT 21H
    LOOP L1
    
    MOV AH,4CH
    INT 21H
MAIN ENDP
CODES ENDS
    END MAIN 

2.BX 中的无符号数以八进制的形式输出。

STACKS SEGMENT
    DW 30H DUP(?)
    TOP LABEL WORD
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,SS:STACKS
MAIN PROC FAR
    MOV AX,STACKS
    MOV SS,AX
    LEA SP,TOP
    
    ROL BX,1
    MOV DL,0
    ADC DL,30H
    MOV AH,2
    INT 21H

    MOV CX,5;五次大移
L1:
    PUSH CX
    MOV CL,3
    ROL BX,CL;三次小移
    MOV DL,BL;低八位
    AND DL,7;屏蔽高5位
    ADD DL,30H
    MOV AH,2
    INT 21H

    POP CX
    LOOP L1
    
    MOV AH,4CH
    INT 21H
MAIN ENDP
CODES ENDS
    END MAIN

3.将 BX 中的无符号数以十六进制的形式输出。

STACKS SEGMENT
    DW 30H DUP(?)
    TOP LABEL WORD
STACKS ENDS

CODES SEGMENT 
    ASSUME CS:CODES,SS:STACKS
MAIN PROC FAR
    MOV AX,STACKS
    MOV SS,AX

    MOV CX,4
L1:
    PUSH CX
    MOV CL,4
    ROL BX,CL
    MOV DL,BL
    AND DL,0FH
    ADD DL,30H
    CMP DL,39H
    JBE DISP
    ADD DL,7
DISP:
    MOV AH,2
    INT 21H
    POP CX
    LOOP L1

    MOV AH,4CH
    INT 21H
MAIN ENDP
CODES ENDS
    END MAIN
4.将 BX 中的无符号数以十进制的形式输出。
STACKS SEGMENT
    DW 30H DUP(?)
    TOP LABEL WORD
STACKS ENDS

CODES SEGMENT 
    ASSUME CS:CODES,SS:STACKS
MAIN PROC FAR
    MOV AX,STACKS
    MOV SS,AX

    XOR CX,CX
    MOV AX,BX
L1:
    XOR DX,DX
    MOV SI,10
    DIV SI
    PUSH DX
    INC CX
    CMP AX,0
    JNE L1
L2:
    POP DX
    ADD DL,30H
    MOV AH,2
    INT 21H
    LOOP L2

    MOV AH,4CH
    INT 21H
MAIN ENDP
CODES ENDS
    END MIAN 

5.将 BX 中的有符号数输出(针对十进制而言)。

STACKS SEGMENT
    DW 30H DUP(?)
    TOP LABEL WORD
STACKS ENDS

CODES SEGMENT 
    ASSUME CS:CODES,SS:STACKS
MAIN PROC FAR
    MOV AX,STACKS
    MOV SS,AX

    XOR CX,CX
    CMP BX,0;判断是否为0
    JNE L1
    MOV DL,30H
    MOV AH,2
    INT 21H
    JMP L5
L1:
    JNS L4;判断为正则转
    MOV DL,'-'
    MOV AH,2
    INT 21H
    MOV AX,BX
    NEG AX
L2:
    XOR DX,DX
    MOV SI,10
    DIV SI
    PUSH DX
    INC CX
    CMP AX,0
    JNE L2
L3:
    POP DX
    ADD DL,30H
    MOV AH,2
    INT 21H
    LOOP L3
    JMP L5
L4:   
    MOV AX,BX
    JMP L2
L5:
    MOV AH,4CH
    INT 21H
MAIN ENDP
CODES ENDS
    END MAIN

6.教材第五章的习题 5.1-5.3

5.1试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

DATAS SEGMENT
    RLEN DB 0
DATAS ENDS

STACKS SEGMENT
    DB 100H DUP(?)
    TOP LABEL WORD
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,STACKS
    MOV SS,AX
    LEA SP,TOP  
L1:    
    MOV AH,1
    INT 21H
    ;输入判断
    CMP AL,'a'
    JB L1
    CMP AL,'z'
    JA L1
    
    MOV CL,AL
    ;打印回车换行,
    MOV DL,0AH
    MOV AH,2
    INT 21H
    MOV DL,0DH
    MOV AH,2
    INT 21H
    
    MOV DL,CL
    SUB DL,20H 
      
    MOV AH,2
    INT 21H
     
    MOV AH,4CH
    INT 21H
MAIN ENDP
CODES ENDS
    END MAIN

注意:

代码中注释打印换行还有个更简便的的方法,只需要在数据段中定义一个回车换行的字符串,利用九号功能输出打印即可,代码如下。(仔细查看九号功能的使用条件,下面代码中注释掉的语句是用于测试的。)

DATAS SEGMENT
    ;STR0 DB 'HE$'
    STR1 DB 0DH,0AH,'$' 
DATAS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    ;LEA SI,STR0
    ;MOV DX,SI
    ;MOV AH,9
    ;INT 21H
    
    LEA SI,STR1
    MOV DX,SI
    MOV AH,9
    INT 21H
    
    ;LEA SI,STR0
    ;MOV DX,SI
    ;MOV AH,9
    ;INT 21H
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START
5.2编写程序,从键盘接收一个小写字母,然后找出它的前导字符和后续字符,再按顺序显
示这三个字符。
DATAS SEGMENT    
    RLEN DB 0   
DATAS ENDS

STACKS SEGMENT
    DB 100H DUP(?)
    TOP LABEL WORD
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
MAIN PROC FAR
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,STACKS
    MOV SS,AX
    LEA SP,TOP   
L1:    
    MOV AH,1
    INT 21H
    CMP AL,'a'
    JB L1
    CMP AL,'z'
    JA L1
    MOV CL,AL
    MOV DL,0AH
    MOV AH,2
    INT 21H
    MOV DL,0DH
    MOV AH,2
    INT 21H
    
    MOV DL,CL
    DEC DL
    MOV AH,2
    INT 21H
    MOV DL,CL
    MOV AH,2
    INT 21H
    MOV DL,CL
    INC DL
    MOV AH,2
    INT 21H
        
    MOV AH,4CH
    INT 21H
MAIN ENDP
CODES ENDS
    END MAIN
5.3将 AX 寄存器中的 16 位数分成 4 组,每组 4 位,然后把这四组数分别放在 ALBL
CL DL 中。
DATAS SEGMENT
     ;ax中的数据自己随便定义一个,或者可以搞个进制输入保存在ax中
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    XOR DX,DX
    
    
    MOV DX,AX
    MOV CL,4
    ROL DX,CL
    MOV AL,DL
    AND AL,0FH
    
    MOV DX,AX
    ROL DX,CL
    MOV BL,DL
    AND BL,0FH
    
    MOV DX,AX
    ROL DX,CL
    MOV CL,DL
    AND CL,0FH
    
    MOV DX,AX
    ROL DX,CL
    AND DL,0FH
    
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bluefeast

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值