Сейчас на форуме: bartolomeo (+6 невидимых) |
eXeL@B —› Программирование —› помогите найти ошибку в asm коде |
Посл.ответ | Сообщение |
|
Создано: 15 февраля 2011 13:15 · Личное сообщение · #1 у меня есть такой код use16 org 0x7C00 start: mov ax, cs mov ds, ax mov ax,0B800h mov es,ax str1 db 'Hello',0 mov si,str1 call print mov ah,10h int 16h mov ax, 5307h ; xor bx, bx ; inc bx ; закрытите приложения mov cx, 3 ; int 15h ; ;========================================================== print: mov di,0 mov ah,7 p2: lodsb test al,al je p1 mov [es:di],ax add di,2 jmp p2 p1: ret ;========================================================== finish: times 0x1FE-finish+start db 0 db 0x55,0xAA когда строка такая как сейчас она норм выводится но стит её поменять на чтото другое и всё =(( уже дето час танцую с бубном, а понять не могу почему пишу на fasme |
|
Создано: 15 февраля 2011 13:45 · Поправил: Veliant · Личное сообщение · #2 |
|
Создано: 15 февраля 2011 13:47 · Поправил: ARCHANGEL · Личное сообщение · #3 mov [es:di],ax на mov [es:di],al а mov ah,7 убрать. Но не уверен, ибо я родился во времена виндоуз. Veliant пишет: Кто же данные размещает в перемешку с кодом? Вынесите str1 куда нибудь после ret Авторы малвари так делают, и всё пашет. Тут не это главное. ----- Stuck to the plan, always think that we would stand up, never ran. |
|
Создано: 15 февраля 2011 14:21 · Поправил: =TS= · Личное сообщение · #4 вместо mov [es:di],ax проще использовать stosw (т.к. используемые ей регистры уже инициализированы) вместо mov si,str1 попробуй lea si,str1 в начале функции print можешь вставить cld UPD. Для stosw не забудь убрать add di,2 ----- DREAMS CALL US | Сообщение посчитали полезным: Sover |
|
Создано: 15 февраля 2011 14:22 · Поправил: Sover · Личное сообщение · #5 ARCHANGEL пишет: mov [es:di],axна mov [es:di],alа mov ah,7 убрать. Но не уверен, ибо я родился во времена виндоуз. mov ah,7 это белый шрифт на чёрном фоне mov [es:di],al сделал так но всеравно показывает не все сообщения например Hello! <-показывает Hello <-не показывает Hello world <-не показывает Hello world! <- показывает |
|
Создано: 15 февраля 2011 14:30 · Личное сообщение · #6 Повторяю для тех кто в танке. Твоя строка исполняется как код. Code:
Откуда процессор знает что после mov es,ax идёт какая-то фигня которую исполнять не надо? Он всё подряд исполняет. =TS= пишет: вместо mov [es:di],ax проще использовать stosw Строковые команды медленные, лучше не использовать. =TS= пишет: вместо mov si,str1 попробуй lea si,str1 Это без раницы. ARCHANGEL пишет: mov [es:di],ax на mov [es:di],al Это у него правидьно, он символ с атрибутами в видеопамять пишет. ARCHANGEL пишет: Авторы малвари так делают, и всё пашет. Тут не это главное. Ну-ну. Только надо jmp тогда перед строкой ставить чтоб он данные перепрыгнул. | Сообщение посчитали полезным: Veliant, Sover, bizdon |
|
Создано: 15 февраля 2011 14:31 · Личное сообщение · #7 |
|
Создано: 15 февраля 2011 14:36 · Личное сообщение · #8 |
|
Создано: 15 февраля 2011 14:40 · Личное сообщение · #9 |
|
Создано: 15 февраля 2011 14:42 · Личное сообщение · #10 |
|
Создано: 15 февраля 2011 14:49 · Поправил: cppasm · Личное сообщение · #11 |
|
Создано: 15 февраля 2011 15:13 · Личное сообщение · #12 |
|
Создано: 15 февраля 2011 15:17 · Личное сообщение · #13 |
eXeL@B —› Программирование —› помогите найти ошибку в asm коде |
Эта тема закрыта. Ответы больше не принимаются. |