2.4.1. Конструкции безусловного ветвления.
143. Переход к адресу, находящемуся на вершине стека JP (SP) RET
144. Переход к адресу, находящемуся в DE. JP (DE) EX DE, HL
JP (HL)
145. Переход к адресу, находящемуся в BC. JP (BC) LD H, B
LD L, C JP (HL)
или
PUSH BC RET
Второй вариант значительно медленнее первого, но зато не затрагивает регистра HL.
14 6. Переход к адресу, находящемуся в заданном адресе.
JP (ADDR) LD HL, (ADDR)
JP (HL)
147. Многовариантное ветвление. Предполагается, что есть таблица адресов, в которой находятся адреса переходов. Адрес начала этой таблицы находится в HL, а индекс, указывающий на порядковый номер элемента в таблице, находится в аккумуляторе.
ADD A,A - индекс надо удвоить, т.к. элементами таблицы являются адреса, а они занимают по два байта. LD E,A - перевод индекса в 16-битную
LD D, 0 форму
ADD HL,DE - определяется адрес элемента LD E, (HL) - вводится сам элемент, INC HL состоящий их
LD D, (HL) двух байтов
EX DE,HL - ввод адреса перехода
JP (HL) - переход по адресу, взятому из таблицы.
147. Переход, если в аккумуляторе 0.
AND A JR Z,ADDR
148. Переход, если в регистре 0.
INC reg DEC reg JR Z,ADDR
149. Переход, если в заданном адресе 0
LD HL,ADDR INC (HL) DEC (HL) JR Z,ADDR1
проверка аккумулятора переход, если 0
пр ов е рка регистра переход, если 0
проверка на 0 переход, если 0
ИЛИ
LD A,(ADDR) AND A JR Z,ADDR1
150. Переход, если в регистровой паре 0.
LD A,rph
OR rpl - проверка на 0
JR Z,ADDR - переход, если 0
151. Переход, если в индексном регистре 0.
PUSH xy POP reg LD A,rph OR rpl JR Z,ADDR
152. Переход, если двухбайтный адрес содержит 0.
LD HL,(ADDR) LD A, H OR L
JR Z,ADDR1
153. Переход, если заданный бит регистра равен 0.
BIT N, reg JR Z,ADDR
Переход, если бит 7 аккумулятора равен 0. AND A JP P,ADDR
ИЛИ
RLA
JR NC,ADDR
155. Переход, если бит 6 аккумулятора равен нулю.
ADD A,A JP P,ADDR
156. Переход, если бит 0 аккумулятора равен нулю.
RRA
JP NC,ADDR
157. Переход, если заданный бит в адресе равен нулю.
LD HL,ADDR BIT N,(HL) JR Z,ADDR1
158. Переход, если прерывания отключены.
LD A, I - по этой команде состояние
триггера прерываний передается во флаг четности
JP PO,ADDR
По образу конструкций перехода по нулю строятся аналогичные конструкции перехода, если в аккумуляторе, регистре, адресе и т. п. не ноль .
159. Переход, если содержимое аккумулятора равно заданному
числу.
CP N
JR Z,ADDR
160. Переход, если в регистре 1.
DEC reg JR Z,ADDR
Эту же процедуру можно применять и для проверки ячейки памяти с адресацией через HL или через индексный регистр.
161. Переход, если в регистре FF.
INC reg JR Z,ADDR
Эту же процедуру можно применять и для проверки ячейки памяти с адресацией через HL или через индексный регистр.
162. Переход, если содержимое аккумулятора равно содержимому регистра.
CP reg JR Z,ADDR
163. Переход, если содержимое аккумулятора равно содержимому заданного адреса.
LD HL,ADDR CP (HL) JR Z,ADDR1
164. Переход, если в регистровой паре содержится число NN.
LD HL,NN AND A SBC HL, rp JR Z,ADDR
165. Переход, если в адресе, на который указывает HL, содержится число, равное содержимому регистра.
AND A SBC HL, rp JR Z , ADDR
166. Переход, если в указателе стека содержится заданное
число.
LD HL,NN AND A SBC HL , S P JR Z,ADDR
167. Переход, если содержимое указателя стека равно содержимому регистра HL.
AND A SBC HL , S P JR Z,ADDR
168. Переход, если содержимое индексного регистра равно двухбайтному числу.
PUSH xy POP rp LD HL,NN AND A SBC HL, rp JR Z,ADDR
Аналогично строятся конструкции перехода по условию "не равно".
169. Переход, если содержимое аккумулятора положительное.
AND A JP P,ADDR
170. Переход, если содержимое регистровой пары положительное .
INC rph DEC rph JP P,ADDR
171. Переход, если содержимое регистра положительное.
INC reg DEC reg JP P,ADDR
172. Переход, если содержимое адреса положительное.
LD HL,ADDR INC (HL) DEC (HL) JP P,ADDR1
ИЛИ
LD A,(ADDR) AND A JP P,ADDR
173. Переход, если содержимое индексного регистра положительное .
PUSH xy POP AF AND A JP P,ADDR
174. Переход, если двухбайтное число, находящееся в заданном адресе положительное.
LD A, (ADDR+1) - достаточно проверить старший AND A байт
JP P,ADDR1
ИЛИ
LD HL,ADDR+1
BIT 7,HL - информация о знаке
JR Z,ADDR содержится в старшем бите
Аналогичными конструкциями выполняются и переходы по отрицательному числу.
175. Переход, если содержимое аккумулятора больше, чем заданное число (без знака). Особый случай здесь возникает, если операнды равны. В этом случае переход не совершается.
CP N
JR C,END JR NZ,ADDR END: NOP
176. Переход, если содержимое аккумулятора больше содержимого регистра (без знака).
CP reg JR C,END JR NZ,ADDR END: NOP
ИЛИ
LD reg1,A
LD A,reg
CP reg1
JR NC,ADDR
ИЛИ
INC reg CP reg JR NC,ADDR
177. Переход, если содержимое аккумулятора больше содержимого заданного адреса (без знака) .
LD HL,ADDR CP (HL) JR C,END JR NZ,ADDR1 END: NOP
ИЛИ
LD reg, A
LD A,(ADDR)
CP reg
JR C,ADDR1
178. Переход, если содержимое регистра HL больше содержимого регистровой пары (без знака) .
SCF
SBC HL, rp JR NC,ADDR
179. Переход, если содержимое HL больше, чем заданное 16-битное число (без учета знака) .
LD rp,-NN-1 ADD HL, rp JR C, ADDR
180. Переход, если содержимое указателя стека больше, чем содержимое HL (без знака) .
AND A SBC HL , S P JR C, ADDR
181. Переход, если содержимое указателя стека больше заданного 16-битного числа (без знака) .
LD HL,-NN-1 ADD HL , S P JR C, ADDR
182. Переход, если содержимое индексного регистра больше заданного 16-битного числа (без знака) .
LD rp, -NN-1 ADD xy, rp JR C, ADDR
183. Переход, если содержимое индексного регистра больше содержимого HL (без знака) .
PUSH xy POP rp AND A SBC HL, rp JR C, ADDR
184. Переход, если содержимое аккумулятора не больше заданного числа (без знака) .
CP N - сравнение
JR C,ADDR - переход, если "меньше"
JR Z,ADDR - переход, если "равно"
CP N+1
JR C,ADDR - переход, если "НЕ МЕНЬШЕ"
185. Переход, если содержимое аккумулятора не больше содержимого заданного регистра (без знака).
CP reg JR C, ADDR JR Z,ADDR
ИЛИ
LD reg1,A - запомнили
LD A, reg - взяли сод
CP reg1 - сравнение
JR NC,ADDR - переход,
ИЛИ
INC reg CP reg JR C, ADDR
186. Переход, если содержимое аккумулятора не больше содержимого заданного адреса (без учета знака).
LD HL,ADDR CP (HL) JR C, ADDR JR Z,ADDR
ИЛИ
LD reg, A LD A,(ADDR) CP reg JR NC,ADDR
187. Переход, если содержимое HL не больше, чем содержимое заданной регистровой пары (без знака) .
SCF
SBC HL, rp JR C, ADDR
188. Переход, если содержимое HL не больше, чем заданное число двойной длины (без учета знака) .
LD rp, -NN-1 ADD HL,rp JR NC,ADDR
содержимое ак-ра ержимое регистра
если "не больше"
189. Переход, если содержимое указателя стека не больше, чем содержимое регистра HL (без учета знака) .
AND A SBC HL , S P JR NC,ADDR
190. Переход, если содержимое указателя стека не больше, чем заданное двухбайтное число (без знака) .
LD HL,-NN-1 ADD HL , S P JR NC,ADDR
191. Переход, если содержимое индексного регистра не больше, чем заданное двухбайтное число.
LD rp,-NN-1 ADD xy, rp JR NC,ADDR
192. Переход, если содержимое индексного регистра не больше, чем содержимое регистра HL (без знака) .
PUSH xy POP rp AND A SBC HL, rp JR NC,ADDR
193. Переход, если содержимое аккумулятора меньше, чем заданное число (без учета знака) .
CP N
JR C, ADDR
если содержимое
аккумулятора меньше
194. Переход, содержимого регистра (без знака) .
CP reg JR C, ADDR
195. Переход, содержимого заданного адреса (без знака)
LD HL,ADDR CP (HL) JR C, ADDR
196. Переход, если содержимое регистра HL меньше содержимого заданного регистра (без учета знака).
AND A SBC HL, rp JR C, ADDR
197. Переход, если содержимое регистра HL меньше заданного двухбайтного числа (без учета знака).
LD rp,-NN ADD HL, rp JR NC,ADDR
198. Переход, если указатель стека меньше HL (без знака).
SCF
SBC HL , S P JR NC,ADDR
199. Переход, если указатель стека меньше двухбайтного числа (без учета знака) .
LD HL,-NN ADD HL , S P JR NC,ADDR
200. Переход, если содержимое индексного регистра меньше заданного двухбайтного числа (без учета знака).
LD rp,-NN ADD xy, rp JR NC,ADDR
201. Переход, если содержимое индексного регистра меньше содержимого регистра HL (без знака) .
PUSH xy POP rp SCF
SBC HL, rp JR NC,ADDR
202. Переход, если содержимое аккумулятора не меньше заданного числа (без знака) .
CP N
JR NC,ADDR
203. Переход, если аккумулятор не меньше заданного регистра (без знака) .
CP reg JR NC,ADDR
204. Переход, если аккумулятор не меньше содержимого заданного адреса (без знака) .
LD HL,ADDR CP (HL) JR NC,ADDR1
205. Переход, если содержимое регистра HL не меньше содержимого заданной регистровой пары (без учета знака).
AND A SBC HL, rp JR NC,ADDR
206. Переход, если содержимое регистра HL не меньше заданного двухбайтного числа (без знака) .
LD rp,-NN ADD HL, rp JR C, ADDR
207. Переход, если указатель стека не меньше HL (без знака).
SCF
SBC HL , S P JR C, ADDR
208. Переход, если указатель стека не меньше, чем заданное двухбайтное число (без учета знака) .
LD HL,-NN ADD HL , S P JR C, ADDR
209. Переход, если содержимое индексного регистра не меньше, чем заданное двухбайтное число (без знака) .
LD rp,-NN ADD xy, rp JR C, ADDR
210. Переход, если содержимое индексного регистра не меньше, чем содержимое HL (без знака) .
PUSH xy POP rp SCF
SBC HL, rp JR C, ADDR