;转换 ------------宏 bc macro ;把BX中的和 调整转换成ascii能输出 mov ax,bx mov dx,0 div cx ;除法cx和ax dx中保留余数 ax保留商 mov bx,dx mov dl,al add dl,30h ;变成能显示的ascii mov ah,02h ;输出al int 21h endm enter macro ;回车换行 ---------宏 mov dl,0dh mov ah,2 int 21h mov dl,0ah mov ah,2 int 21h endm ;以上为需要调用的宏 data segment msg db 'The result only can show 5 long number!',' ','Press "Esc" to exit',13,10,'$' msg2 db ' ',13,10,'input N (small than "11111")',13,10,'cin N :$' error db 13,10,' The char you pressed Not a number!',13,10,'$' space db ' ',13,10,'$' ;tast db 'tast is Test!',13,10,'$' data ends code segment assume cs:code,ds:data start: mov ax,data mov ds,ax mov dx,offset msg ;输出提示 mov ah,09h int 21h lop:mov dx,offset msg2 ;输出提示2 mov ah,09h int 21h ;以下接收输入的N mov bx,0 nechr: mov ah,1 ;回显输入 int 21h cmp al,1bh je ext sub al,30h ;ascii上减掉30 数字字符就是自己的ascii-30 ;cmp al,1h jl exit ;al比1小 ,ascii不到字符0,累加 cmp al,9d jg eror ;ascii超出字符9,累加 ;mov dx,offset tast ;mov ah,9 ;int 21h ;jmp ext cbw ;db变dw,字节扩展指令 xchg ax,bx ;xchg是互换指令 mov cx,10d ;十进制10存入cx mul cx ;乘法,cx和前面的al xchg ax,bx ;互换 add bx,ax ;加法 jmp nechr ;无条件循环,做下一个数字 exit:mov cx,bx ;开始递减累加 mov bx,0 loop1: add bx,cx ;和存入BX loop loop1 ;cx递减条件循环 enter ;回车换行宏 mov cx,10000d ;转化为十进制输出,最高显示5位 bc ;调用宏 mov cx,1000d bc mov cx,100d bc mov cx,10d bc mov cx,1d bc mov dx,offset space mov ah,09h int 21h jmp lop eror:mov dx,offset error mov ah,9 int 21h jmp lop mov ah,4ch int 21h ext: code ends end start
21,459
社区成员
41,601
社区内容
加载中
试试用AI创作助手写篇文章吧