Обьясните откуда вылазят эти цифры(прим. внизу). Так вот: Написал на асме простую прогу(суммирует 5+3). Откомпилировал на TASM. Открыл дебаггер и пошагово прошелся по коду проги. Все бы да ничего, но вот непонятно откуда берутся значения AX, DS, AH. И для чего они нужны. Код (Text): .MODEL SMALL .DATA x DW 5 y DW 3 z DW ? .CODE begin: MOV AX,@DATA MOV DS,AX MOV AX,X ADD AX,Y MOV Z,AX MOV AH,4CH INT 21H END begin Код (Text): ;*************Как это изначально находится в дебаггере******************************** AH BYTE ' ' 0 (00H) DS WORD 21195 (52CBH) AX WORD 0 (0H) ;************* MOV AX,@DATA ***************************************************** AH BYTE 'R' 82 (52H) DS WORD 21195 (52CBH) AX WORD 21212 (52DCH) ;************* MOV DS,AX ******************************************************** AH BYTE 'R' 82 (52H) DS WORD 21212 (52DCH) AX WORD 21212 (52DCH) ;************* MOV AX,X ********************************************************* AH BYTE ' ' 0 (0H) DS WORD 21212 (52DCH) AX WORD 5 (5H) ;************* ADD AX,Y ********************************************************* AH BYTE ' ' 0 (0H) DS WORD 21212 (52DCH) AX WORD 8 (8H) ;************* MOV Z,AX ********************************************************* AH BYTE ' ' 0 (0H) DS WORD 21212 (52DCH) AX WORD 8 (8H) ;************* MOV AH,4CH ******************************************************* AH BYTE 'L' 76 (4CH) DS WORD 21212 (52DCH) AX WORD 19464 (4C08H) ;************* INT 21H ********************************************************** AH BYTE '♣' 5 (05H) DS WORD 9433 (24D9H) AX WORD 1362 (552H) ;************* END BEGIN ******************************************************** спасибо за внимание
Как же ты прогу писал, если не знаешь, что такое регистры? Почитай статьи для дзенствующих, тут, на сайте. Найдешь ответы. Да и гугл тебе поможет быстрее, чем дождешься развернутого ответа ИБО лень
Код (Text): MOV AX,@DATA Заносит в AX адрес сегмента данных (начинается в программе с директивы .DATA) Код (Text): MOV DS,AX Передаёт адрес сегмента данных из AX в DS (именно сегментный регистр DS используется для доступа к данным, если не давать процессору иных указаний). Напрямую загрузить адрес сегмента в сегментный регистр нельзя, поэтому и используется передача через регистр AX. Код (Text): MOV AX,X ADD AX,Y MOV Z,AX В регистр AX загружается значение переменной X (там лежит 5), затем к содержимому AX прибавляется содержимое переменной Y (3), после чего полученный результат (8) записывается в переменную Z. Код (Text): MOV AH,4CH INT 21H Завершение работы программы и выход в ДОС.
Напрямую -- это значит прямо в DS, минуя промежуточный регистр (AX в данном случае). Нельзя написать команду MOV DS, @DATA
Понятно. спасибо. токо вот не понял, что значит: Код (Text): MOV AH,4CH AH эт регистр, а 4CH эт значение. а для чего это перемещается? какое это имеет значение? и 4СH это что-то вроде кода в некой таблице? И последнее, значение @DATA откуда берется? кто/что дает это значение?
progma137 4Ch -- это код функции MS DOS "завершение программы", а вызов этой (как и многих других) функции осуществляется следующей командой INT 21h. @DATA -- это встроенная "переменная" транслятора ассемблера, в которой он хранит адрес сегмента данных. Т.е. если сегмент данных начинается по адресу 1000h:0000h, то @DATA будет иметь значение 1000h.
FreeManCPM а) строковые инструкции и доступ к стеку -- специфические вещи, а человек только-только начал пытаться что-то в ассемблере понять, и грузить его лишним (на этом этапе) незачем. б) LDS, LES и иже с ними грузят не сегментный регистр, а регистровую пару -- сегментный регистр и один из РОНов. Загрузить константу в сегментный регистр напрямую нельзя.