Проблема с инструкциями условного перехода в 16-разрядном ассемблере заключается в том, что они ограничиваются +127 или -128 байтами для смещения.
386 ввел кодировку jcc rel16
, которая доступна в 16-разрядный режим, но только на 386 и позже. Различные ассемблеры имеют разные опции для включения 386 команд в 16-битном коде
. Некоторые также имеют опции для автоматического выполнения описанных ниже действий: условный jcc rel8
по jmp rel16
. Например, TASM имеет /jJUMPS
.
Допустим, у вас есть это:
cmp al, '1'
jnz ItsNot1
; lots of code here
ItsNot1:
Если вы выпрыгнете из диапазона вы можете перекодировать его так:
cmp al, '1'
jz Its1
jmp ItsNot1
Its1:
; lots of code here
ItsNot1:
Все, что я сделал, это изменение смысла сравнения и переход вокруг безусловного перехода, который приведет вас к альтернативному коду.
Иногда это раздражает, если у вас много условных прыжков. Вы перекодируете один из них, и это вызовет другое. И тогда вы реорганизуете код и обнаружите, что некоторые из этих искаженных условностей могут исчезнуть. Обычно я не беспокоюсь об этом, если меня серьезно не беспокоит размер кода.
Некоторые ассемблеры имеют переключатель, который будет делать автоматическое определение размера для вас, чтобы вы всегда могли кодировать условные переходы,
Скорее всего, разница между
PRINT 'something'
и
call PTHIS
db 13, 10, 'something'
Является ли это первой один - это макрос, который расширяется до полного кода для печати, плюс строка, которую вы хотите распечатать. Вторая - простая команда call
(3 байта) плюс строка. Или, в терминах C ++, макрос PRINT
похож на встроенную функцию, а call PTHIS
является обычным (не встроенным) вызовом функции.
В вашем gif он показывает только то, что отладчик показывает усеченное значение. Можете ли вы проверить длину строки внутри функции parseComicsList и прежде чем делать console.log?
Вы можете проверить его значение в разделе scope, он имеет полная длина до последнего закрывающего тега
Ваш загруженный html просто в порядке. Проблема в вашей функции parseComicList
, потому что она ищет имя класса, которого нет в очищенном HTML-коде. Позвольте мне объяснить, что происходит.
Когда вы загружаете www.gocomics.com в свой браузер и просматриваете html, есть несколько тегов img с именами классов img-fluid lazyloaded
, которые вы ищете, и другие с именами классов lazyload img-fluid
. Прокрутите немного и снова проверьте HTML. Вы заметите, что теги img с именами классов lazyload img-fluid
изменились на img-fluid lazyloaded
. Смотрите скриншот ниже:
Это поведение, используемое этим сайтом, чтобы определить, ожидает ли изображение отложенную загрузку или нет, который обрабатывается внутри с помощью JavaScript при прокрутке сайта. Этот тип сценария отложенной загрузки обычно проверяет, находится ли изображение в окне просмотра или близко к входу в окно просмотра, и это делается путем сравнения положения прокрутки с положением изображения. Только тогда имена классов lazyload img-fluid
изменятся на img-fluid lazyloaded
.
Ваш вызов извлечения загружает только html-страницу этой страницы, но браузер не взаимодействует с этим кодом, то есть прокрутка отсутствует. Это означает, что, основываясь на моих наблюдениях о том, как имена классов этого сайта будут работать во время прокрутки, вы не найдете изображений с именами классов img-fluid lazyloaded
.
Вместо этого сделайте html.indexOf('lazyload img-fluid')
, чтобы искать изображения с начальным именем класса, и это будет работать. См. Пример ниже:
Еще один совет, который не подвергает вас ленивой загрузке логики сайта, - поиск тегов предков. со статическими именами классов, такими как comic__image
или item-comic-image
, а затем - нахождение первого тега img сразу после этой позиции. В некоторых случаях это может быть лучше, потому что это поможет вам убедиться, что вы сопоставляете только изображения внутри постов, вместо того, чтобы сопоставлять любые ленивые изображения загрузки сайта. В этом случае он начинает пропускать первое изображение, которое находится внутри верхнего баннера. См. Пример ниже:
Вы отправляете запрос GET. Он работает как ожидалось - он возвращает вам HTML страницы. Если вы хотите выполнить запрос POST, он должен быть в форме
fetch("server.com/potatoes", {
method: "POST",
headers: {
Accept: "application/json",
"Content-type": "application/json",
},
})
.then(res => {
return res.json();
})
.then(res => {
console.log(res);
})
.catch(e => {
console.log(e);
});
Заголовки не требуются, и если вы их не включите, они будут автоматически добавлены. Их нужно менять в зависимости от того, какой ответ вы ожидаете.