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
Exit_Proc: mov ah,4ch ;結束程式
int 21h
Code ENDS
END Start
本文轉自蓬萊仙羽51CTO部落格,原文連結:http://blog.51cto.com/dingxiaowei/1366798,如需轉載請自行聯系原作者