Программирование в машинных кодах и на языке ассемблера 1993 г.

Расширение системы команд процессора - конструкции ветвления.


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




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Самиздат - пьеса "Как трезвеют SysOp-ы", Savin Boris.
Introduction - от авторов.
Обзор - Обзор новых игровых программ : Prince of Persia, Megaxonix, Soldier of Future, Red Stone I&II. Лучшая десятка.

В этот день...   18 сентября