Это я считаю важным моментом, отсутствующим в других ответах. Как указывает Клиффорд, JL означает прыжок, если V xor N равно 1.
0x0005 - 0x0000
вычитание производится сложением, инвертированием и добавлением единицы
11111111111111111
0000000000000101
+1111111111111111
===================
0000000000000101
N is 0, V is 0
N xor V равно 0 xor 0, что равно 0
JL не должен разветвляться.
N равно 0, V равно 0, Z равно 0, и выполнение зависит от архитектуры, оно может сохранить его как есть C = 1 или может инвертировать его, потому что это вычитание и считать его заимствованием C = 0
Из комментария кажется, что вы хотите, чтобы это выходило из цикла с R5 = 0, чтобы мы знали, какие флаги будут для R5 больше 0 (ну, мы можем предположить)
0x0000 - 0x0000
11111111111111111
0000000000000000
+ 1111111111111111
====================
0000000000000000
V равно 0, N равно 0, Z теперь равно 1, а C равно 0 или 1 в зависимости от архитектуры.
Проще всего использовать переход, если не ноль (переход, если флаг z не установлен), это также не имеет проблем, которые больше или меньше, чем есть, как вы должны понимать для архитектуры и из документации, если больше, чем меньше, чем мнемоники для математики без знака или математики со знаком, поскольку это имеет значение. если вы посмотрите, например, на руку, вы увидите, что она вызывает неподписанное из подписанного (две мнемоники/имена для одной и той же инструкции).
person
old_timer
schedule
07.03.2018