я должен сделать программу в TASM, которые должны напечатать треугольник чисел, как это:печать треугольник чисел в сборке x86
input: n. Ex: n=4
output:
1
1 2
1 2 3
1 2 3 4
я сумел сделать мою программу напечатать эту вещь, но я также необходимо заставить его работать с номерами от 0 до 255, а не только для цифр.
Я знаю, что я должен прочитать номер по одной цифре и создать сумму, как это:
, если я должен читать 82, я прочитал во-первых, 8, положить его в регистр, а затем, когда я прочитайте 2, он должен быть добавлен к 8 * 10.
Можете ли вы помочь мне реализовать это в моей программе?
.model small
.stack 100h
.data
msg db "Enter the desired value: $", 10, 13
nr db ?
.code
mov AX, @data
mov DS, AX
mov dl, 10
mov ah, 02h
int 21h
mov dl, 13
mov ah, 02h
int 21h
mov DX, OFFSET msg
mov AH, 9
int 21h
xor ax, ax
mov ah, 08h ;citire prima cifra din numar
int 21h
mov ah, 02h
mov dl, al
int 21h
sub al,30h
mov ah,10
mul ah
mov [nr],al ;mutam prima cifra inmultita cu 10 in nr
mov ah, 08h
int 21h
mov ah, 02h
mov dl, al
int 21h
sub al, 30h
add [nr], al
sub nr,30h
mov dl, 10
mov ah, 02h
int 21h
mov dl, 13
mov ah, 02h
int 21h
mov cx,1
mov bx,31h
mov ah, 2
mov dx, bx
int 21h
loop1:
xor ax, ax
mov al, nr
cmp ax, cx
je final
mov dl, 10
mov ah, 02h
int 21h
mov dl, 13
mov ah, 02h
int 21h
mov bx, 0
loop2:
inc bx
add bx,30h
mov ah, 2
mov dx, bx
int 21h
sub bx,30h
cmp bx, cx
jne loop2
inc bx
add bx,30h
mov ah, 2
mov dx, bx
int 21h
inc cx
jmp loop1
final:
mov AH,4Ch ; Function to exit
mov AL,00 ; Return 00
int 21h
end
вы знаете, что вам нужно делать 'x * 10 + y', что вызывает у вас проблемы? Вы не можете это сделать? Это тривиально, но и множество примеров для него даже здесь, на SO. – Jester
Поскольку вы будете делать много преобразований number-> ascii, вы можете рассмотреть возможность оптимизации. Рисуем первую целую последнюю строку в буфере памяти, затем исправляя ее для каждой строки, чтобы отображать только необходимое количество чисел, и просто печатать только буфер, не делая больше математики чисел. На самом деле можно создать этот начальный отпечаток последней строки, даже не работая с числами, просто исправляя строки ASCII. – Ped7g
Я редактировал мой код выше. Мне удалось прочитать двухзначное число, но теперь я не знаю, как их печатать. Этот код печатает все символы ASCII, и я не вижу логики. –