для tasma.Сессия рулит.Я считал MBR в буфер,надо считать размер жестяка и десятичным числом вывести на экран
Код (Text): Hex2Dec proc rEAX:DWORD, pStr:DWORD LOCAL InvStr[10]: BYTE pushad mov eax,rEAX mov ecx,0Ah xor esi,esi lea edi,InvStr @1: xor edx,edx div ecx add edx,30h mov byte ptr [edi+esi],dl inc esi test eax,eax jnz @1 mov ecx,esi mov esi,edi mov edi,pStr @2: movzx eax,byte ptr [esi+ecx-01] stosb loop @2 mov byte ptr [edi],0 popad ret Hex2Dec endp Вот код перевода числа в строку. Если надо 16 бит, переделай сам - минута делов. Какой функцией вывести не знаю, т.к. с досом давно не работал
Код (Text): buf db '8123462', 10, 13, '$' push ax, dx lea dx, buf mov ax, 9 int 21h pop ax, dx Печать строки на экран в досе.
Используй FPU. Алгоритм таков: делишь число на 10, записывая остаток от деления, пока не останется ноль. 8123462/10=812346 ;ост=2 812346/10 =81234 ;ост=6 81234/10 =8123 ;ост=4 8123/10 =812 ;ост=3 812/10 =81 ;ост=2 81/10 =8 ;ост=1 8/10 =0 ;ост=8 оператор FPREM делит st(0) на st(1) и пишет остаток в st(0) т.е. остатки от деления выводишь в обратном порядке.
Satyr если уж и использовать FPU, то на полную катушку Код (Text): .data Data_Int64 dq ?;64-разрядное число Data_BCD dt ?;число в BCD-формате mesbox_text db 25 dup(0) ... .code mov di,offset mesbox_text;куда выводить fninit ;сброс сопроцессора fild Data_Int64 ;загрузить число в двоичном коде fbstp Data_BCD ;извлечь число в коде BCD mov si,9 ;в десятом байте информация о знаке числа b2: cmp byte ptr [si-1+Data_BCD],0 jnz b3 dec si jnz b2 ;пропускаем незначащие (нулевые) разряды слева b3: mov al,byte ptr [si-1+Data_BCD];загружаем первую значащую пару разрядов cmp al,0 ;если в старшей тетраде 0 - пропустить старшую тетраду ja b4 add al,30h ;младшую тетраду переводим в ASCII stosb dec si b4: xor ax,ax ;распаковываем остальные разряды числа mov al,byte ptr [si-1+Data_BCD] shl ax,4 ;выделяем старшую и младшую тетрады shr al,4 add ax,3030h ;переводим в ASCII-код и выводим в нормальном порядке xchg ah,al stosw dec si jnz b4