если нечетное, чтобы показать номер/2
После mov bl,al
для символов < = «9» вы делаете sar bl,1
(shr
бы больше смысла для меня , если вы не пришли с Java, и вы считаете, что это нормально, когда байтовые значения подписаны).
Так что для символа '7'
(значение 37h
) вы будете производить 1Bh
в bl
, который является технически непечатаемых символов.
Если вы хотите напечатать для ввода '7'
"3.5"
на выходе, вы можете добавить 24
вычислить всю часть цифр в ASCII (1Bh + 24 = 33h
= «3»), а затем сделать вывод, что в качестве одного гольца, то выход '.'
и '5'
Символы ASCII (поскольку каждый номер odd_number/2 будет иметь десятичную часть).
Если вам интересно, почему магическое число +24
действительно производит половину номера ... потому что у вас есть на входе символ ASCII '7'
, а не номер 7
. Значение значков цифр в ASCII определяется как 48 + digit_value
, в данном случае 48+7 = 55 = 37h
.
Таким образом, чтобы вычислить 7/2 в "человеческом пути", от '7'
входа можно было бы сделать:
x = input - '0' ; x = '7' - '0' = 7 (conversion to numeric value)
x /= 2 ; x = 7/2 = 3
output = x + '0' ; converting it back to ASCII for displaying
; output = 3+48 = 51 = 33h = '3'
В настоящее время записывается в виде единой формулы, которая является:
выхода = (вход - 48)/2 + 48 = <>
выход = вход/2 - 48/2 + 48 = <>
выход = вход/2 - 24 + 48 = <>
выход = вход/2 + 24 < =>
На этикетке odd:
у вас уже есть в bl
значение input/2
, вместо того чтобы восстановить оригинал (adc bl,bl
сразу после odd:
), и делает -48 /2 +48
операцию один за другим, вы можете просто сделать +24
, чтобы получить результат напрямую.
Это сила понимания, что у вас есть на входе, что вы хотите на выходе, и делаете простые математические рассуждения между всеми на высоком уровне, даже не касаясь какой-либо инструкции по процессору.
После того, как вы знаете, что вы хотите рассчитать, вы пишете инструкции процессора, чтобы сделать это, в моем случае огромный комплекс add bl,24
, а затем char-output с int 21h
, который я слишком ленив, чтобы добавить, поскольку вы уже делаете что один с преобразованием верхнего/нижнего регистра.
я как-то боюсь, что это не ответ вы ничего ожидать, может быть, вы будете думать, что я своего рода троллинг вас ... может быть, вы будете частично правильно ... Опять же, если вы будете полностью понять, что я сделал и почему, вы должны легко решить свой вопрос.
К сожалению, я понятия не имею, что такое «противоположное» число, я могу представить себе много вещей под ним, но лишь немногие бы разумно, чтобы отобразить.
Ugh. Плохо отформатированный код с чрезмерно краткими идентификаторами и абсолютно никаких пояснительных комментариев. Я, конечно, не хочу читать это и выяснять, что вы пытаетесь сделать! –
Что противоположно числу? – Ped7g