汇编 | 屏幕显示数字

功能:PRINT子程序在屏幕上显示AL寄存器中的内容,0-9则在屏幕上显示0-9,大于9的在屏幕上显示英语字母。

DATA  SEGMENT
      TABLE   DB    1,2,8,9,    10,11,34,35,    36,37,40,41,   42,43,66,67 
                    ;1-9 显示 1-9
                    ;10-35 显示A-Z
                    ;36-41 显示其他字符
                    ;42-67 显示a-z       
      NUM     EQU   ($-TABLE)     
DATA  ENDS


CODE  SEGMENT
      ASSUME:  CS:CODE, DS:DATA       
START:MOV   AX,DATA
      MOV   DS,AX   
            
      MOV   CX,NUM      ;CX保存TABLE中数字个数,用于循环判断
      LEA   SI,TABLE    ;地址指针SI指向TABLE储存区首地址

L:    MOV   AL,[SI]
      CALL  PRINT
      INC   SI    
      LOOP  L         
                                                
      MOV   AH, 4CH
      INT   21H           
                   
;显示子程序 
PRINT PROC NEAR                
      PUSH  DX 
       
      MOV   DL,AL        
      CMP   DL,9        ;判断是否 <=9
      JLE   ADD1        ; 是  ---> ASCII码加30H     
      JNLE  ADD2        ;不是 ---> ASCII码加37H   
            
ADD1: ADD   DL,30H
      JMP   PRI     
               
ADD2: ADD   DL,37H        
      
PRI:  ;显示
      MOV   AH,02H       
      INT   21H                        
      ;加回车符
      MOV   DX,0DH       
      INT   21H       
      ;加换行符
      MOV   DL,0AH         
      INT   21H   
                           
      POP   DX       
      RET                       
PRINT ENDP

    
CODE  ENDS
    END   START

结果:

 对应关系:1-9 显示 1-9
                   10-35 显示A-Z
                   36-41 显示其他字符
                    42-67 显示a-z 

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是汇编语言编写输出在屏幕显示杨辉三角的程序: ```assembly .model small .stack 100h .data row db 1 column db ? .code mov ax, @data mov ds, ax mov ah, 02h ;设置光标位置 mov bh, 0 ;页码 mov dh, row ;行 mov dl, column ;列 int 10h mov cx, 10 ;循环输出10行杨辉三角 mov bl, ' ' mov column, 30 ;从第30列开始输出 mov ah, 09h ;显示字符 L1: mov dx, 0 ;每行开始时输出0个空格 mov ah, 02h ;设置光标位置 mov bh, 0 ;页码 mov dh, row ;行 mov dl, column ;列 int 10h mov bx, 1 ;第一个数是1 mov ah, 09h ;显示字符 int 10h ;显示1 mov cx, row ;每行输出row个数字 mov bx, 1 ;第一个数是1 L2: mov ax, bx ;ax = bx add bx, bx ;bx = bx * 2 mov dx, bx ;dx = bx add dx, ax ;dx = ax + bx mov bx, dx ;bx = dx mov ah, 09h ;显示字符 mov al, ' ' int 10h ;显示一个空格 mov al, bl ;显示数字 add al, bh ;转换成ASCII码 int 10h ;显示数字 inc cx ;cx加1 cmp cx, row ;如果cx等于row,就跳出循环 jz EndLoop jmp L2 ;继续循环 EndLoop: mov ah, 02h ;设置光标位置 mov bh, 0 ;页码 mov dh, row ;行 mov dl, column ;列 int 10h inc row ;行加1 sub column, 2 ;列减2 cmp cx, 0 ;如果cx等于0,就跳出循环 jnz L1 ;继续循环 mov ah, 4ch ;程序结束 int 21h end ``` 这个程序可以输出一个由数字组成的杨辉三角,具体效果如下: ``` 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 1 7 21 35 35 21 7 1 1 8 28 56 70 56 28 8 1 1 9 36 84 126 126 84 36 9 1 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值