boss 关 1

 

假如AX现在有一个数是123d ,要把它打印到屏幕上。
首先进行拆分。

123    除以 10  =12 余数为3
12    除以 10  =1 余数为2
1      除以 10  =0  余数为1


同样,把AX的内容不停的除以10,只需要3次,然后把每次的余数反向组合到一起,就是原来的数字。
再把这5个数字对应的Ascll输入到显存里面,屏幕上就看到了。


db=Declare Byte  =字节=  8位
dw=Declare Word  =字=2个字节= 16位
dd=Declare Double Word =2字=4个字节= 32位
dq=Declare Quad Word
  =4字=8个字节 =64位

jmp
mov
add
div


16位 除以 8位
div 指令
div 8位寄存器
div 8位内存

被除数在AX中,商在AL中,余数在AH中。

mov ax,0x0005
mov cl,0x02
div cl

AL=02,AH=0x1  


mov ax,0x0005
mov byte[cs:0x0023],0x02
div byte[cs:0x0023]





32位除以16位
div 指令
div 16位寄存器
div 16位内存
div bx

被除数在DX:AX中,因为1个寄存器存不下,商在AX中,余数在DX中。




;CS:IP = 0x07c00

mov ax,0xb800
mov es,ax

mov ax,123 
add ax,456
mov cx,10     

div cx   ; dx:ax=1:12  al=12 dl=3    除的数放 商 放 al里  余数放  dl里

mov byte[numbers+0x07c00+0x00],dl
mov dx,0  ;dx:ax=0:12


div cx  ;  dx:ax=0:12
mov byte[numbers+0x07c00+0x01],dl
mov dx,0  ;dx:ax=0:1

div cx  ; dx:ax=0:1
mov byte[numbers+0x07c00+0x02],dl
mov dx,0  ;dx:ax=0:0


mov al,[numbers+0x07c00+02]
add al,0x30
mov byte[es:0x00],al
mov byte[es:0x01],0x07

mov al,[numbers+0x07c00+01]
add al,0x30
mov byte[es:0x02],al
mov byte[es:0x03],0x07

mov al,[numbers+0x07c00+00]
add al,0x30  [0的 ascll]
mov byte[es:0x04],al
mov byte[es:0x05],0x07    [黑体白字]


numbers: db 0,0,0
stop: jmp near stop


jmp near stop


     
原文地址:https://www.cnblogs.com/xiaodaxiaonao/p/7117903.html