2011-02-08 2 views
1

Привет всем У меня вопрос по нижеприведенному коду? весь мой дисплей находится в ASCII при использовании (mov al, 2; int 21h). Я могу проверить только одно условие, но не все, как проверить все одновременно и вывести его. Я очень свежая, пожалуйста, помогите. Tks.как написать ниже код сборки

Рассмотрите набор предварительно сохраненных 1-байтовых положительных чисел элементов в массиве. Сделайте следующее. 1. Подсчитайте количество элементов в вашем массиве и отобразите их; 2. Идентифицировать и отображать все номера меньше определенного значения (вы можете установить этот порог, как вы, ). Если их нет, отобразите сообщение; 3. Определите числа EVEN, подсчитайте их и вычислите их среднее значение. Покажите свой результат; 4. Определите все простые числа в вашем массиве и отобразите их ;

+1

Некоторые предложения: 1) retag как «домашняя работа». 2) Определите платформу и ассемблер и любые другие важные сведения о вашей среде сборки. 3) Покажите свои попытки (код и результаты) и определите неблагоприятное поведение (т. Е. Не просто «он не работает», но как результаты не соответствуют вашим целям.) – Throwback1986

ответ

0

Вам нужно подойти к чему-то подобному в кусках. Учитывая то, что вам нужно сделать, первая часть, которую я, вероятно, рассмотрю, будет преобразовывать однобайтное целое число в строку, представляющую это число в десятичной системе.

Для этого вы делите число на 10. Остальная часть будет представлять наименее значащую цифру (число от 0 до 9 включительно). Преобразуйте это в цифру, добавив «0». Повторяйте этот процесс до тех пор, пока ваш номер не станет 0. Чтобы сделать это легко печатаемым, вы можете начать с буфера из четырех байтов с «$» в последнем байте. Поместите цифры в буфер, начиная с последнего байта перед «$», уменьшая указатель на буфер для каждой итерации.

Идентификация четных чисел довольно проста: нечетное число всегда имеет наименьший значащий бит, а четное число - нет.

+0

Привет, Джерри. как проверить четное число и простое число.проблема в том, что 1) весь мой дисплей находится в ASCII, даже я определяю свою аранжировку с использованием «db byte 1,2,3,4» 2), чтобы одновременно проверить более двух условий и отобразить их отдельно. ТКС. – fresh

0

Перебор массива байтов довольно легко (я предполагаю, что вы должны остановиться, когда вы столкнулись с отрицательным числом, но ваша ситуация может меняться):

mov esi, pointerToByteArray 
loop_start: 
    mov al, [esi] 
    cmp al, 80h 
    jge loop_end 

    ; Do your byte-checking code here 

    inc esi 
    jmp loop_start 
loop_end: 

Когда цикл заканчивается, общее число элементов будет esi-pointerToByteArray. Часть вторая, которую вы уже сделали, вы этого не осознавали. Вы можете использовать КСС опкод так же, как:

cmp al, threshold 
jge not_threshhold 
; add to threshold counter 
not_threshold: 

Часть три довольно легко слишком, но потребуется некоторое знание с битами. Вы должны знать, что каждое четное число будет иметь наименьший значащий бит (место 1), поэтому, если вы удалите первые 7 бит, у вас будет либо 1 (для нечетных чисел), либо 0 (для четного):

mov bl, al 
and bl, 1 
jnz not_even 
; add to even counter 
not_even: 

Самый простой способ сделать часть 4 проверки каждого простого меньше или равна 127 (максимальное значение положительного байта):

cmp al, 2 
je is_prime 
cmp al, 3 
je is_prime 
cmp al, 5 
je is_prime 
cmp al, 7 
je is_prime 
; all the primes up to 127 
jmp not_prime 

is_prime: 
; add to prime counter 
not_prime: 

Пожалуйста, не то, что гораздо лучше, эффективнее, и элегантные способы чтобы проверить грубость, чем это, но он должен выполнить свою работу. Не зная дополнительной информации, я не могу рассказать вам, как выводить информацию, которую вы собираете.

Смежные вопросы