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