产生随机数
Code Segment;定义段
Assume CS:Code,DS:Code,ES:Code; 建立段寄存器寻址
; -----------------------------------------
; 功能:输出一个字符
; 入口:dl=要显示的字符
Output_Chr proc Near ;定义过程.
push ax ;压入堆栈
mov ah,02h ;调用中断输出一个数
int 21h
pop ax ;弹出堆栈
ret ;过程返回
Output_Chr endp ;过程结束
; -----------------------------------------
; 功能:把AX中的二进制无符号数转换成显式的十进制ASCII码,并送显示屏显示
; 入口:AX=二进制数
; 出口:在当前光标位置显示转换后的ASCII码数字
Dec_ASCII Proc Near
push dx ;压入堆栈
push bx ;压入堆栈
push di;压入堆栈
mov bx,10
lea di,@@Temp_Save[6] ;LEA DX,string ;把偏移地址存到DX
mov byte ptr [di],'$'
dec di ;减 1
cld ;清方向标志位.
@@Divide: xor dx,dx ;异或运算
div bx ;无符号除法.
or dl,30h ;或运算
mov [di],dl
dec di ;减 1
test ax,0ffffh ;测试指令
jnz @@Divide ;条件转移指令
inc di ;加 1.
push di ;压入堆栈
pop dx ;弹出堆栈
mov ah,9
int 21h
pop di ;弹出堆栈
pop bx ;弹出堆栈
pop dx;弹出堆栈
ret ;过程返回
@@Temp_Save db 7 dup(?)
Dec_ASCII EndP
; -----------------------------------------
Press_Key db 13,10,13,10,'Press any key to exit...$'
Start: push cs;压入堆栈
pop ds;弹出堆栈
push es;压入堆栈
pop es;弹出堆
mov cx,6;随机产生25个1~6的随机数
@@L1: xor al,al;异或运算
out 43h,al;I/O端口输出语法: OUT {端口号│DX},累加器
in al,40h;I/O端口输入语法: IN 累加器, {端口号│DX}
cmp al,6;比较.(两操作数作减法,仅修改标志位,不回送结果).
ja @@L1 ;大于6则继续产生随机数
cmp al,0 ;等于0则继续产生随机数
jz @@L1
xor ah,ah;异或运算,清0
call Dec_ASCII ;显示输出这个数
mov dl,20h
call Output_Chr
loop @@L1
lea dx,Press_Key; LEA DX,string ;把偏移地址存到DX.
mov ah,9
int 21h
mov ah,1
int 21h
Exit_Proc: mov ah,4ch ;结束程序
int 21h
Code ENDS
END Start
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(四):结合BotSharp
· 一个基于 .NET 开源免费的异地组网和内网穿透工具
· 《HelloGitHub》第 108 期
· Windows桌面应用自动更新解决方案SharpUpdater5发布
· 我的家庭实验室服务器集群硬件清单