# #assembly #x86
#собрание #x86
Вопрос:
Мне нужно отсортировать массив в одном процессе, и тогда наименьшее число должно поменяться местами с первым числом . чем второе меньшее число со вторым числом и так далее… Мой только что написал 00 00 00 00 в ds:0000
proc min push bx push ax mov si,bx inc bx checkminnum: ; the outer loop for checking all the numbers mov al, [byte ptr si] cmp [byte ptr bx] , al jb smaller mov si, bx; the offset of the smaller num is saved in si smaller: inc bx cmp [byte ptr bx], '
Комментарии:
1. "Мой только что написал 00 00 00 00" Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, - это вставка в порядке возрастания.
; IN (bx) OUT (al='
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
; IN () OUT () MOD (al,cl,dl) proc swap push bx push si mov bx, offset array More: call min ; -gt; AL='
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
; check when the loop should end jne checkminnum pop ax pop bx ret endp min proc swap push bx mov bx, offset array repos: call min mov al, [byte ptr bx] push ax mov al, [byte ptr si] mov [byte ptr bx], al pop ax mov [byte ptr si], al inc bx cmp [byte ptr bx], '
Комментарии:
1. "Мой только что написал 00 00 00 00" Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, - это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
jne repos pop bx ret endp swap
Комментарии:
1. "Мой только что написал 00 00 00 00" Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, - это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
,si) MOD () proc min push bx SetMin: mov si, bx ; Position of minimum Cont: inc bx mov al, [bx] cmp al, 'В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
; check when the loop should end jne checkminnum pop ax pop bx ret endp min proc swap push bx mov bx, offset array repos: call min mov al, [byte ptr bx] push ax mov al, [byte ptr si] mov [byte ptr bx], al pop ax mov [byte ptr si], al inc bx cmp [byte ptr bx], '
Комментарии:
1. "Мой только что написал 00 00 00 00" Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, - это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
jne repos pop bx ret endp swap
Комментарии:
1. "Мой только что написал 00 00 00 00" Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, - это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
je Done cmp al, [si] ; Compare with current minimum jb SetMin ; Smaller, so record position jmp Cont ; Not smaller, so just continue Done: pop bx ret endp min
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
; check when the loop should end jne checkminnum pop ax pop bx ret endp min proc swap push bx mov bx, offset array repos: call min mov al, [byte ptr bx] push ax mov al, [byte ptr si] mov [byte ptr bx], al pop ax mov [byte ptr si], al inc bx cmp [byte ptr bx], ‘
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
jne repos pop bx ret endp swap
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
SI cmp si, bx je Skip mov cl, [bx] mov dl, [si] mov [bx], dl mov [si], cl Skip: inc bx cmp [bx], al ; AL=’Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
; check when the loop should end jne checkminnum pop ax pop bx ret endp min proc swap push bx mov bx, offset array repos: call min mov al, [byte ptr bx] push ax mov al, [byte ptr si] mov [byte ptr bx], al pop ax mov [byte ptr si], al inc bx cmp [byte ptr bx], ‘
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
jne repos pop bx ret endp swap
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
,si) MOD () proc min push bx SetMin: mov si, bx ; Position of minimum Cont: inc bx mov al, [bx] cmp al, ‘В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
; check when the loop should end jne checkminnum pop ax pop bx ret endp min proc swap push bx mov bx, offset array repos: call min mov al, [byte ptr bx] push ax mov al, [byte ptr si] mov [byte ptr bx], al pop ax mov [byte ptr si], al inc bx cmp [byte ptr bx], ‘
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
jne repos pop bx ret endp swap
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
je Done cmp al, [si] ; Compare with current minimum jb SetMin ; Smaller, so record position jmp Cont ; Not smaller, so just continue Done: pop bx ret endp min
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
; check when the loop should end jne checkminnum pop ax pop bx ret endp min proc swap push bx mov bx, offset array repos: call min mov al, [byte ptr bx] push ax mov al, [byte ptr si] mov [byte ptr bx], al pop ax mov [byte ptr si], al inc bx cmp [byte ptr bx], ‘
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
jne repos pop bx ret endp swap
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
jne More pop si pop bx ret endp swapНедостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
; check when the loop should end jne checkminnum pop ax pop bx ret endp min proc swap push bx mov bx, offset array repos: call min mov al, [byte ptr bx] push ax mov al, [byte ptr si] mov [byte ptr bx], al pop ax mov [byte ptr si], al inc bx cmp [byte ptr bx], ‘
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
jne repos pop bx ret endp swap
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
,si) MOD () proc min push bx SetMin: mov si, bx ; Position of minimum Cont: inc bx mov al, [bx] cmp al, ‘В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
; check when the loop should end jne checkminnum pop ax pop bx ret endp min proc swap push bx mov bx, offset array repos: call min mov al, [byte ptr bx] push ax mov al, [byte ptr si] mov [byte ptr bx], al pop ax mov [byte ptr si], al inc bx cmp [byte ptr bx], ‘
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
jne repos pop bx ret endp swap
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
je Done cmp al, [si] ; Compare with current minimum jb SetMin ; Smaller, so record position jmp Cont ; Not smaller, so just continue Done: pop bx ret endp min
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
; check when the loop should end jne checkminnum pop ax pop bx ret endp min proc swap push bx mov bx, offset array repos: call min mov al, [byte ptr bx] push ax mov al, [byte ptr si] mov [byte ptr bx], al pop ax mov [byte ptr si], al inc bx cmp [byte ptr bx], ‘
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.
jne repos pop bx ret endp swap
Комментарии:
1. «Мой только что написал 00 00 00 00» Для какого ввода? Кроме того, мне кажется, что
jb
в вашейmin
функции должно бытьja
(или переключить порядок операндовcmp
). Вы просматривали свой код в отладчике, чтобы увидеть, что происходит в каждой строке?2. Вы пробовали отладить его одним шагом, чтобы увидеть, где он отличается от того, что вы ожидаете?
3. @майкл , 5,7,8,0,12,6,$
Ответ №1:
Минимальный процесс показывает эти две ошибки:
- Вы используете условие, противоположное тому, которое вам нужно было бы для того, чтобы найти минимум.
- Ваш код на своей последней итерации будет обрабатывать $-терминатор, как если бы он был элементом массива. Вы должны проверить наличие терминатора перед сравнением со следующим элементом массива, поскольку указанный элемент может не существовать.
То, что делает код, — это вставка в порядке возрастания.
В процессе подкачки, если положение минимума равно текущему фронту массива, лучше вообще не менять элементы местами.
И вместо того , чтобы использовать стек и работать с одним регистром AL
, используйте дополнительные регистры, такие как CL
и DL
для повышения эффективности.
Недостатком использования терминатора для работы с вашим массивом является то, что значение 36 (ASCII-код символа$) не может отображаться в самом массиве.