[Logo] Форум DL
  [DL]  На главную страницу 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2
Автор Сообщение
Михаил Долинский

Темы: 2010
Сообщений: 47872

Мой профиль


Дина Пигусова:

Обновлённый файл:
https://docs.google.com/document/d/1HvMOqrGDfao1tHxl9t4ghkr0trpPCuKu34bMQgEb_p4/edit

Спокойно выполняет простые задания на сложение и вычитание.Задание на умножение и занесение в 4 байтовую переменную не выполняет, а для деления делает только слово на слово.  


Твой файл

Мне нужна помощь в решении задач на ассемблере.
Начинаться программа должна со строки:
jmp begin
Следом идёт ввод переменных, который осуществляется следующим образом:
a db 0
b db 0
y db 0
Где a, b, y - переменные; db, dw, dd - размерность переменных;
db - байт или же 8 бит
dw - 2 байт или же 16 бит
dd - 4 байт или же 32 бит
После объявления переменных идет строка:
begin:
Как можно использовать функции:
mov bx, a ; присваивает регистру bx значения a (bx = a)
add ax, b ; складывает значения ax и b сохраняя результат в ax (ax = ax + b)
sub ax, a ; вычитает из ax значение a сохраняя результат в ax (ax = ax – a)
imul bx ; умножает ax на bx сохраняя остаток в dx и сохраняя результат в регистре ax (ax = ax * bx, dx = 0)
idiv bx ; делит ax на bx сохраняя остаток в dx и сохраняя результат в ax (ax = ax / bx, dx = остаток от деления ax / bx)
программа оканчивается строкой:
Ends: jmp Ends ;$E
Примечания:
1) Можно использовать только регистры ax, bx, cx, al.
2) регистр ax и al использовать только для перевода байта в слово и для функций imul и idiv
3) если переменная, которую надо использовать, не слово, то в начале помещаешь переменную только в регистр al и после используешь функцию cbw, чтобы переменную перенести в ax, дальше можно сохранить эту переменную в любом из регистров.
6) В одном регистре не сохраняем несколько переменных.
5) Если в функции idiv делитель является словом, то перед функцией используем функцию cwd
 


Замечания к нему
1. dd описывать не нужно, мы не пользуемся.
2. Первое, что нужно описать - ВСЕГДА превращение ВСЕХ байтовых переменных в словные с помощью команды CBW
3. Можно иcпользовать ещё регистры SI,DI
4. команда imul работает не совсем так как ты описала (попробуй умножить положительное на отрицательное и посмотри в DX).
.. и вообще слово остаток из операции деления
5. Перед делением ВСЕГДА надо загружать делимое в AX и затем делать CWD, и делить только на слово.
(собственно все операции нужно делать со словами, а все байты сначала превращать в слова и только потом использовать)

Выкладывай также ссылки на диалоги, чтобы было видно какие задачи ты научила его решать.
И как шёл диалог.

Михаил Долинский

Темы: 2010
Сообщений: 47872

Мой профиль
Некоторые компании закрывают свои сайты для доступа из Беларуси и России — пользуйтесь VPN, если что-то не открылось
(браузер Opera предоставляет бесплатный VPN из коробки — как десктопный, так и мобильный)
 
Михаил Долинский

Темы: 2010
Сообщений: 47872

Мой профиль
https://edstem.org/ - AI Tutor "Ed Discussion"
Дина Пигусова

Темы: 0
Сообщений: 22

Мой профиль
Обновлённый файл:
https://docs.google.com/document/d/1VO2bfBjELIKmhbzlMppdDSsRxiaaEdsYCz4dSO76tnA/edit

может выполнять все задания из обучения, но:
1) При вычитании может перепутать местами переменные
2) Решая простую цепочку не всегда выполняет нужные действия, но при повторном отправлении начинает решать правильно
3) В простой цепочке при делении может забыть функцию cwd

Диалоги с Poe:

Сложение:
https://poe.com/s/2T3L7d4jV46TrlFVWPMG

Вычитание:
https://poe.com/s/xmYxf5ko0stqNbFPlRqb

Умножение:
https://poe.com/s/DRppFM3pXZ8iTTOTlm6H

Деление:
https://poe.com/s/2k5Eyor8a8MEsmBjz7LG

Сумма и деление:
https://poe.com/s/fciIR7pg3AZjuMYJl3rZ

Разность и произведение:
https://poe.com/s/M9MdVC4A0RLJFlE2bACI

Сумма и деление:
https://poe.com/s/V5hxOmKSClAEVsQA4IlE (- прислал неудачный код)
https://poe.com/s/960g4vHlMHLn3oV2UF6w (- прислал код, но забыл cwd в одном месте)
Михаил Долинский

Темы: 2010
Сообщений: 47872

Мой профиль
Желательно, один раз загрузить файл-помощник, а потом только условия задач загружать.

Всех, которые, он сможет решать – в одном диалоге.
Если какие-то задачи не решились с первой попытки, нужно думать, как изменить файл-помощник, чтобы решились.

Предлагаю научить его писать комментарии в строке инструкции, а не над ней.
И комментировать каждую строку

То есть, не так 

	; Загружаем a в bx
	mov bx, a
	
	; Загружаем b в ax
	mov ax, b
	
	; Складываем a и b, результат сохраняем в y
	add ax, bx
	mov y, ax

А так 

	mov bx, a                 ; Загружаем a в bx
	mov ax, b                 ; Загружаем b в ax
	add ax, bx                ; Складываем a и b, 
	mov y, ax                 ; результат сохраняем в y 


Комментарии после программы надо попросить его не писать, вот эти и

Комментарии:
1. Программа начинается с `jmp begin`, чтобы перейти к основному коду.
2. Объявляем переменные `a`, `b` и `y` как 2-байтовые (`dw`).
3. В `begin:` загружаем значение `a` в регистр `bx`, а значение `b` в регистр `ax`.
4. Складываем `a` и `b` с помощью `add ax, bx`, результат сохраняем в `y`.
5. Завершаем программу бесконечным циклом `jmp Ends`.
Таким образом, мы реализовали сложение двух 2-байтовых чисел `a` и `b`, результат которого сохраняется в переменную `y`.


Мой вариант исправленного твоего файла

Мне нужна помощь в решении задач на ассемблере процессора Intel 8086.

========== Краткое описание достаточного для решения задач подмножества ассемблера Intel 8086 =================

Начинаться программа должна со строки:
	jmp	begin

Следом идёт  описание переменных, которое осуществляется следующим образом:
a	db	0
b	dw	0
y	dw	0

Где a, b, y - переменные; db, dw - размерность переменных;
db - байт или же 8 бит
dw – слово = 2 байта или же 16 бит

После объявления переменных идет строка:
begin:

Затем идёт текст программы, содержащий инструкции, который выполняют операции только со словами.

Перед использованием байтовую переменную нужно превращать в словную c помощью команды cbw

Например

      mov al, a     ;  a была объявлена так:  a db 0    
      cbw              ; ax = a

Имеются команды  
       mov – пересылкa
       add - сложение
       sub  - вычитание 
       imul - умножение
       idiv   - деление  

Примеры 

mov bx, a	; присваивает регистру bx значения a (bx = a)
add ax, b 	; складывает значения ax и b сохраняя результат в ax (ax = ax + b)
sub ax, a	; вычитает из ax значение a сохраняя результат в ax (ax = ax – a)
imul bx    	; умножает ax на bx сохраняя результат в регистре ax (ax = ax * bx), 

Перед делением делимое надо подготовить 
Например, мы хотим поделить a на b   (пусть оба слова)

mov bx,b      ; делитель
mov ax,a      ; делимое 
cwd              ; подготовленное к делению делимое  
idiv bx         ; делит ax на bx сохраняя частное в ax, остаток в dx  (ax = ax / bx, dx = остаток от деления ax на bx)

Ещё пример 

пример деления a/b если a - 2 байта, b - байт:
mov al, b	; В начале заносим байтовую переменную в al
cbw		; Переводим байтовую переменную в слово
mov bx, ax	; Сохраняем в другом резисторе 
mov ax, a	; Заносим делимое в ax
cwd		
idiv bx		; Делим ax/bx, другими словами получаем ax = a / b

программа оканчивается строкой:
Ends:    	jmp	Ends ;$E

============================== конец описания ассемблера Intel 8086 =================


может выполнять все задания из обучения, но:
1) При вычитании может перепутать местами переменные
2) Решая простую цепочку не всегда выполняет нужные действия, но при повторном отправлении начинает решать правильно
3) В простой цепочке при делении может забыть функцию cwd
 
Значит нужно ЯВНО прописать в файле помощнике

Вот так нужно делать
ПРИМЕР

Вот так НЕЛЬЗЯ ДЕЛАТЬ - это ошибка
ПРИМЕР

И так до тех пор пока все задачи не станут решаться с первой попытки

Резюме

1. Нужно один раз загрузить файл-помощник, а потом только условия задач.
Всех, которые, он сможет решать – в одном диалоге, по очереди.
Если какие-то задачи не решились с первой попытки, нужно думать, как изменить файл-помощник, чтобы решились.
Но сначала в диалоге пытаться ДОобъяснить.
Все его решения проверять отсылкой на DL
(чтобы и там было видно какие он задачи не умеет решать сразу)
Добиться, чтобы каждая сдалась, по очереди

2. Исправить файл и повторить процесс
В форуме выложить диалоги
 
Дина Пигусова

Темы: 0
Сообщений: 22

Мой профиль
Попробовала работать с сайтом:
https://edstem.org/
Я попыталась зарегистрироваться на нём пару раз, но не вышло. Тогда нашла, что можно попробовать без регистрации, но там надо было зарезервировать день, выбрала ближайшее число и получала письмо с подтверждением, что в определённый день мне предоставят возможность поработать с сайтом, но в назначенный день я так и не получала временный доступ, пытаюсь связаться с поддержкой, но безуспешно.
Дина Пигусова

Темы: 0
Сообщений: 22

Мой профиль
Новый файл:
https://docs.google.com/document/d/1QIrrbYHsvHu0guUcnxpZ3eIPqjFxUbE9eFy1uhOteos/edit

Теперь после отправления можно кидать задачи в чат и ИИ будет их решать.
Пока что он опять может решать только простые задачи на сложение вычитание и умножение, единственное при вычитании он может перепутать переменные местами.
Так же если сразу отправлять задачи, где а - 2 байта, b - байт, то он их решает, а если предварительно кинуть ему решать другие задачи, то он может допустить ошибку, даже если ранее он такую задачу решал.

чаты с Poe:
1) https://poe.com/s/oEOWh6XkfpspxrOcVvrZ
2) https://poe.com/s/VmY6n4hQaM5ONIU77cqq
3) https://poe.com/s/3Q76pmJP3MEBqKy44oYU
Дина Пигусова

Темы: 0
Сообщений: 22

Мой профиль
Файл помощник:
https://docs.google.com/document/d/1uXOw1RkNRVgeq9fWcQgYW1Y1UqVMnIpg8RUqrLwvtFg/edit

Проверен на Poe.
Хорошо решает все простые задачи, включая задачи с двумя действиями. Если ему кидать по очереди много задач, то он может забывать некоторые правила. Это легко решается, либо отправляем пункт из файла, либо открываем новый диалог и сразу кидаем задачу, в которой он ошибался.

Диалоги с Poe:
https://poe.com/s/hm50Q0AAN332TDPFEwuX
https://poe.com/s/aUt7CiipHZwecOnxyRBM
https://poe.com/s/A6rKuGvsdkeWkXu1kqkI
Михаил Долинский

Темы: 2010
Сообщений: 47872

Мой профиль
1. Я писал раньше, добиться чтобы
... - ИИ комментировал справа от команды, а не сверху.
... - ИИ не писал пояснения ПОСЛЕ программы - это лишнее
2. Надо проверять полученные от ИИ решения отсылкой на DL
.. У тебя последняя отсылка на DL от 7 августа, то есть эти решения не проверялись.
3. При делении надо использовать IDIV, а не DIV (который правильно работает только с положительными числами)
4. Про CWD надо может пример привести, чтобы он не ошибался и не приходилось его поправлять.
5. Надо проверять так - решение на DL не прошло - вернуть ему тест, на котором не прошло,
.. чтобы проверить - сможет ли он сам сообразить в чём ошибка
6. Умножение - imul в твоём файле помощнике не написано ни про idiv, ни про imul.
7. Что за [a] -надо что-то дописать в файл помощник, чтобы это никогда не появлялось.
8. Твоя задача сделать файл-помощник таким, чтобы он СРАЗУ писал правильные программы ВСЕГДА.

Дина Пигусова

Темы: 0
Сообщений: 22

Мой профиль
Новый файл:
https://docs.google.com/document/d/1G7RHEMrp6waPU-LwNhSoau9QgTfCLa9F-uevLHZR0Wc/edit

Проверен на Poe.
Все недочёты исправлены, решает простые задачи, но есть трудности с выполнением более одного действия. Так же такой сайт как Poe не может долго помнить правила, поэтому эффективно решает первые две задачи, поэтому стоит после двух задач менять диалог, повторно отправив ему файл.

диалоги:
1) https://poe.com/s/UkLG8n1aT1MtG8moLBSi
2) https://poe.com/s/ydTrO4ySpXs8I0axVQsD
3) https://poe.com/s/ZWK4niL8Wd3MzX7Bt3Uq
4) https://poe.com/s/Y7AciW4xoQxn9UoKm8fn
5) https://poe.com/s/LBtd0hRsf6cKq8ESURuv
Михаил Долинский

Темы: 2010
Сообщений: 47872

Мой профиль


Дина Пигусова:


... есть трудности с выполнением более одного действия.
не может долго помнить правила, поэтому эффективно решает первые две задачи, поэтому стоит после двух задач менять диалог, повторно отправив ему файл.
 
Есть идеи как побороть эти проблемы?
Как минимум, надо привести диалоги с этими проблемами.

Может здесь попробовать.

Ты же писала
https://www.perplexity.ai
Понимает, что от него требуют и нет такой фишки,
что спрашиваешь одно и тоже, а получаешь разные ответы. 


https://t.me/GPT4Telegrambot
https://t.me/GPT4Telegrambot(ChatGPT)
https://t.me/ChatGPTCopycatBot?start=direct&yclid=2776514925464982719
https://bard.google.com/?hl=ru
https://deepai.org/chat
https://www.opera.com/ru
https://www.phind.com/ (Pair Programming with AI)
https://chatgpt.org/
 
Индекс форума ->Учебный процесс ГГУ/СШ 27 ->Проектирование цифровых систем 1, 2
Time:0,055