Trước hết, tôi rất mới với 8086 Hội và nó đã được khá khó khăn cho tôi lấy các kiến thức. Tuy nhiên, tôi sẽ cố hết sức.Tạo một số ngẫu nhiên trong phạm vi 0-9 trong x86 8086 Hội
Tôi đã cố gắng viết mã để tạo số ngẫu nhiên trong phạm vi từ 0-9. Sau khi xem xét một số ví dụ và gợi ý, đây là những gì tôi đã kết thúc. Tôi đã không áp dụng bất kỳ chức năng toán học nào về số lượng đồng hồ đã lấy, để đơn giản và tôi cũng nghĩ nó không cần thiết. Tôi đã kết thúc với, vì một số lý do, tạo ra một số nhất định như 6,7 ít hơn so với con số như 1,3 và 9. Tôi tin rằng đó là bởi vì tôi đang dùng thứ tự thấp hơn của đồng hồ ve, nơi mà các giá trị thay đổi nhanh chóng.
Mục đích của tôi là mô phỏng cuộn xúc xắc mà sau này bị thay đổi phạm vi các mã bên dưới thành 1-6. Câu hỏi của tôi là, Điều này có đủ cho mục đích của tôi không? hoặc có cách nào tốt hơn để làm điều này?
mã:
RANDGEN: ; generate a rand no using the system time
RANDSTART:
MOV AH, 00h ; interrupts to get system time
INT 1AH ; CX:DX now hold number of clock ticks since midnight
; lets just take the lower bits of DL for a start..
MOV BH, 57 ; set limit to 57 (ASCII for 9)
MOV AH, DL
CMP AH, BH ; compare with value in DL,
JA RANDSTART ; if more, regenerate. if not, continue...
MOV BH, 49 ; set limit to 48 (ASCII FOR 0)
MOV AH, DL
CMP AH, BH ; compare with value in DL
JB RANDSTART ; if less, regenerate.
; if not, this is what we need
mov ah, 2h ; call interrupt to display a value in DL
int 21h
RET
trả lời, bởi @johnfound:
tôi tìm thấy con đường của mình là đơn giản hơn, và tốn ít thời gian để tạo ra các số ngẫu nhiên. Ông nói rằng điều này chỉ hoạt động nếu bạn cần một số ngẫu nhiên duy nhất, hoặc khoảng thời gian giữa các số ngẫu nhiên bao gồm tạm dừng cho đầu vào của con người. Nếu không, các con số sẽ không ngẫu nhiên chút nào (tôi tin là do hạt giống thời gian mà ban đầu chúng tôi thực hiện không thay đổi). Nó là tốt cho trường hợp của tôi, kể từ khi tôi mô phỏng một con xúc xắc cuộn, và tôi cần sự can thiệp của người dùng (cuộn khác) trước khi tôi sẽ chạy lại mã.
RANDGEN: ; generate a rand no using the system time
RANDSTART:
MOV AH, 00h ; interrupts to get system time
INT 1AH ; CX:DX now hold number of clock ticks since midnight
mov ax, dx
xor dx, dx
mov cx, 10
div cx ; here dx contains the remainder of the division - from 0 to 9
add dl, '0' ; to ascii from '0' to '9'
mov ah, 2h ; call interrupt to display a value in DL
int 21h
RET
Những gì ông đã làm: 1.We chuyển giá trị trong DX để AX 2.We xóa DX. 3.Chúng tôi đã chuyển 10 tháng 12 sang CX. 4. Chúng tôi chia AX bởi CX vì vậy chúng tôi nhận được phần còn lại trong ngày 0-9 tháng 12 được lưu trữ trong DX 5. Cuối cùng, chúng tôi đã thêm ASCII '0' (dec 48) vào DX để đưa chúng vào ASCII '0' đến '9 '.
Bạn có muốn đầu ra để được trong khoảng 1-10 (như tiêu đề của bạn gợi ý) hoặc 0-255 (như câu hỏi của bạn cho thấy: * ... tạo ra một số ngẫu nhiên của một byte *)? Và mã có vẻ như nó đang cố gắng thực hiện một phạm vi '0' đến' 9' trong ASCII. – lurker
vâng, như trong tiêu đề, 0-9 là chính xác. – Raf