汇编程序

数据段NUM十六进制显示

DATAS SEGMENT
    NUM DW 1224H
DATAS ENDS

STACKS SEGMENT
    
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    MOV BX,NUM
    MOV CL,4
    MOV CH,4	;计数器
JISUAN:
    ROL BX,CL
    
    MOV AL,BL
    AND AL,0FH
    ADD AL,30H
    MOV DL,AL
    MOV AH,2
    INT 21H
    DEC CH
    JNZ JISUAN
    
    MOV AH,4CH
    INT 21H

统计1的个数

CODES ENDS
END START

DATAS SEGMENT
NUM DW 1234H
    
DATAS ENDS

STACKS SEGMENT
    
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV CH,0	;个数‘1’计数器

    MOV BX,NUM    
PANDUAN:
    
    CMP BX,0
    JL JISHU		;0,计数(判断最高位)
    SHL BX,1
    
    JNZ PANDUAN		;>=0,循环判断
    JZ DAYIN		;BX为0,转为打印输出
    
JISHU:
    INC CH
    SHL BX,1		;算数左移,低位补0

    JNZ PANDUAN		;BX不为0,循环判断
DAYIN:   
    MOV DL,CH
    ADD DL,30H		
    MOV AH,2
    INT 21H
    
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

数据段的NUM二进制显示

DATAS SEGMENT
    NUM DW 1224H
DATAS ENDS

STACKS SEGMENT
    
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    
    MOV BX,NUM
    MOV CH,16		;计数器
JISUAN:
    ROL BX,1
    MOV AL,BL
    AND AL,1
    ADD AL,30H
    MOV DL,AL
    MOV AH,2
    INT 21H
    DEC CH
    JNZ JISUAN
    
    MOV AH,4CH
    INT 21H

CODES ENDS
END START

数据段NUM十进制显示

DATAS SEGMENT
    NUM DW 123H
DATAS ENDS

STACKS SEGMENT
    TOS LABEL WORD
    DW 20 DUP(0)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV AX,STACKS
    MOV SS,AX
    MOV SP,OFFSET TOS
    
    MOV AX,NUM
    CWD
    MOV CL,10
    MOV CH,0		;计数器
CHU:
    DIV CL
    
    PUSH AX			;保存商和余数
    MOV AH,0
    INC CH
    CMP AL,0		;商为0时,结束循环
    JNZ CHU
    
QU:					;出栈,输出
    POP BX
    MOV CL,BH
    MOV DL,CL
    ADD DL,30H
    MOV AH,2
    INT 21H
    DEC CH
    JNZ QU
    
    MOV AH,4CH
    INT 21H

CODES ENDS
    END START

比较字符串,输出不同的字母

DATAS SEGMENT
    NUM DW 1234H
    STRING1 DB 'MATDFEY'
    STRING2 DB 'NOMCTEH'
DATAS ENDS

STACKS SEGMENT
    TOS LABEL WORD
    DW 20 DUP(0)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    MOV ES,AX
    
    LEA SI,STRING1
    LEA DI,STRING2		;比较前操作
    CLD					;DF=0,向后进行
    MOV CX,7
    REPNZ CMPSB			;不相等重复比较操作
    
    MOV DL,CL			;剩余还未比较的字符
    ADD DL,30H
    MOV AH,2
    INT 21H
    
    MOV DL,0AH			;换行
    INT 21H
    
    MOV DI,6	
    SUB DI,CX
    MOV DL,STRING1[DI]	;控制访问数据段位置
    INT 21H
    
    MOV AH,4CH
    INT 21H

CODES ENDS
    END START

每隔十秒响铃并输出

;编写一个中断处理程序,要求在主程序运行期间,
; 每隔 10秒响铃一次,同时显示‘The bell is ring!’
datasg segment
    count dw 1
    mess db 'The bell is ring!',0ah,0dh,'$'
datasg ends

codesg segment
main proc far
    assume cs:codesg,ds:datasg,es:datasg
start:
    push ds
    xor ax,ax
    push ax
    mov ax,datasg
    mov ds,ax
    mov es,ax

    mov al,1ch    ;中断号
    mov ah,35h
    int 21h       ;取原中断向量

    push es
    push bx       ;存放在es:bx中,保存原中断向量
    push ds       ;保护数据段

    mov dx,offset ring
    mov ax,seg ring
    mov ds,ax            ;设置新的中断向量 ds:dx
    mov al,1ch
    mov ah,25h
    int 21h      

    pop ds        ;设置完取出数据段
    
    ;--------存取中断向量1------------
    
    in al,21h     ;21h中断屏蔽寄存器
    and al,11111110b
    out 21h,al          ;设置中断屏蔽位,允许定时器中断
    sti                 ;开中断
    mov di,2000
delay:
    mov si,30000
delay1:
    dec si
    jnz delay1
    dec di
    jnz delay

    ;--------存取中断向量2-------------
    pop dx
    pop ds
    mov al,1ch
    mov ah,25h
    int 21h
    ret 
main endp
;----------------------------------
ring proc far		;响铃子程序
    push ds
    push ax
    push cx
    push dx			;入栈保存

    mov ax,datasg
    mov ds,ax

    sti    ;开中断,允许更高级的中断

    dec count
    jnz exit
    mov dx,offset mess     ;显示The bell is ring
    mov ah,09
    int 21h

    mov dx,100
    in al,61h
    and al,11111100b
sound:
    xor al,2
    out 61h,al
    mov cx,140h
wait1:
    loop wait1
    dec dx
    jne sound     ;响铃
    mov count,182
exit:
    cli           ;关中断
    pop dx
    pop cx
    pop ax
    pop ds
    iret
ring endp
;-----------------------------------
codesg ends
    end main

递归与非递归求累加和

DATAS SEGMENT
	RESULT DB 10 DUP(0)
	CJ_2 DB 'DIGUI: $'
DATAS ENDS

STACKS SEGMENT
	DB 10 DUP(0)
	TOS LABEL WORD
STACKS ENDS
CODES SEGMENT
MAIN PROC FAR
	 ASSUME CS:CODES,DS:DATAS,SS:STACKS
	 MOV AX,DATAS
	 MOV DS,AX
	 MOV AX,STACKS
	 MOV SS,AX
	 MOV SP,OFFSET TOS
	 CALL CJ1
	 CALL HUAN
	 CALL CJ2_
	 CALL CJ2
	 CALL HUAN
	 CALL CJ2_DAYIN
	 CALL HUAN
	 MOV AH,4CH
	 INT 21H
MAIN ENDP
;---------------------------
CJ1 PROC NEAR
	 MOV AH,1
	 INT 21H
	 SUB AL,30H
	 MOV CL,0;每次加的数字
	 MOV CH,0;总和
	 MOV DH,0;计数器
JIAHE:
	 INC CL
	 ADD CH,CL
	 CMP CL,AL;al 为输入的 num
	 JNZ JIAHE
 	 MOV [RESULT],CH
	 MOV AL,CH
	 XOR AH,AH
CHU:
	 MOV BH,10
	 DIV BH
	 PUSH AX
	 INC DH;结果入栈的计数器
	 MOV AH,0;ah 为余数,已经进栈保存
	 CMP AL,0;商为 0 时,除法结束

	 JNE CHU
	 MOV DL,10
	 MOV AH,2
	 INT 21H
QU:
	 POP BX
	 DEC DH
	 MOV DL,BH
	 ADD DL,30H
	 MOV AH,2
 	INT 21H
	 CMP DH,0
	 JNE QU
	 RET
CJ1 ENDP
;--------------------------------
CJ2_ PROC NEAR
	 MOV AH,09H
	 LEA DX,CJ_2
	 INT 21H
	 XOR DX,DX
	 MOV AH,2
	 MOV DL,10
	 INT 21H
	 MOV AH,1
	 INT 21H
	 SUB AL,30H
 	MOV CL,AL
	 MOV CH,0
	 RET
CJ2_ ENDP
;---------------------------------
CJ2 PROC NEAR
	 CMP CL,0
	 JZ L2
   	 ADD CH,CL
	 DEC CL
	 CALL CJ2;此处为递归
L2:
	 RET
CJ2 ENDP
;---------------------------------
CJ2_DAYIN PROC NEAR
	 MOV AL,CH
 	 MOV AH,0
 	 MOV CL,0
CHU2:
 	 MOV BL,10
	 DIV BL
 	 PUSH AX

	 MOV AH,0
 	 INC CL
	 CMP AL,0
	 JNE CHU2
QU:
	 POP BX
	 MOV DL,BH
	 ADD DL,30H
	 MOV AH,2
	 INT 21H
	 DEC CL
	 CMP CL,0
	 JNE QU
	 RET
CJ2_DAYIN ENDP
;-----------------------------
HUAN PROC NEAR
	 MOV DL,10
	 MOV AH,2
	 INT 21H
	 RET
HUAN ENDP
;-------------------------
CODES ENDS
	 END MAIN
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值