Разработка программ на Ассемблере с использованием пакета TASM

Цель работы: изучение методики разработки программ на ассемблере с использованием пакета TASM, приобретение практических навыков работы с транслятором, компоновщиком и отладчиком

Теоретические сведения

Наиболее известными пакетами ассемблера для микропроцессоров фирмы Intel являются:

• «Макроассемблер» MASM фирмы Microsoft.

• Turbo Assembler TASM фирмы Borland.

У этих пакетов много общего. Пакет макроассемблера фирмы Microsoft (MASM) получил свое название потому, что он позволяет программисту задавать макроопределения (или макросы), представляющие собой именованные группы команд. Они обладают тем свойством, что их можно было вставлять в программу в любом месте, указав только имя группы в месте вставки. Пакет Turbo Assembler (TASM) интересен тем, что имеет два режима работы. Один из этих режимов называется MASM, поддерживает все основные возможности макроассемблера MASM. Другой режим называется IDEAL, предоставляет более удобный синтаксис написания программ, более эффективное использование памяти при трансляции программы и другие новшества, приближающие компилятор ассемблера к компиляторам языков высокого уровня.

Порядок выполнения работы

1. Наберите в одном из текстовых редакторов MS-DOS (Edit, Far и др.) приведенную ниже программу на языке Ассемблер.

;———Prg_2.asm———————————-

;Программа преобразования двузначного шестнадцатеричного числа

;в символьном виде в двоичное представление.

;Вход: исходное шестнадцатеричное число из двух цифр,

;вводится с клавиатуры.

;Выход: результат преобразования должен

;быть в регистре dl.

;——————————————————

data segment  para public ‘data’  ;сегмент данных

message db ‘Введите две шестнадцатеричные цифры,$’

data ends

stk segment  stack

  db  256 dup (‘?’)  ;сегмент стека

stk ends

code segment  para public ‘code’   ;начало сегмента кода

main proc                                        ;начало процедуры main

 assume cs:code,ds:data,ss:stk

 mov  ax,data                                   ;адрес сегмента данных в регистр ax

 mov  ds,ax                                      ;ax в ds

 mov  ah,9

 mov  dx,offset message

 int  21h

xor  ax,ax                                        ;очистить регистр ax

 mov  ah,1h                                     ;1h в регистр ah

 int  21h                                           ;генерация прерывания с номером 21h

 mov  dl,al                                        ;содержимое регистра al в регистр dl

M2:           ;определение метки M2

 add  dl,al ;сложение: (dl)=(dl)+(al)

 sub  dl,30h                                      ;вычитание: (dl)=(dl)-30h

 cmp  dl,9h                                       ;сравнить (dl) с 9h

 jle  M1                                             ;перейти на метку M1 если dl

 sub  dl,7h                                        ;вычитание: (dl)=(dl)-7h

M1:           ;определение метки M1

 mov  cl,4h                                       ;пересылка 4h в регистр cl

 shl  dl,cl                                          ;сдвиг содержимого dl на 4 разряда влево

 int  21h                                            ;вызов прерывания с номером 21h

 sub  al,30h                                      ;вычитание: (dl)=(dl)-30h

 cmp  al,9h                                       ;сравнить (al) с 9h 28

 jle  M2                                             ;перейти на метку M2 если al

       sub  al,7h                                        ;вычитание: (al)=(al)-7h

mov ax,4c00h                                   ;пересылка 4c00h в регистр ax

int  21h                                             ;вызов прерывания с номером 21h

main endp                                        ;конец процедуры main

code ends                                        ;конец сегмента кода

end main                                          ;конец программы с точкой входа main

2. Сохраните программу на диске в файле Prg_2.asm в директории Work. В этой директории должны находиться файлы tasm.exe, tlink.exe, rtm.exe и td.exe из пакета TASM.

3. Осуществите трансляцию программы следующей командой MS-DOS

tasm.exe /zi prg_2.asm ,,,

Если в исходном тексте программы были синтаксические ошибки, то программа выдаст соответствующие сообщения. Пользуясь этими сообщениями, исправьте ошибки в тексте программы и повторите трансляцию. Эти операции повторяйте до тех пор, пока трансляция будет выполнена без ошибок.

4. Запустите процесс компоновки объектного файла:

tlink.exe /v prg_2.obj

5. Загрузите программу в отладчик командой:

td prg_1.exe

Если все было сделано правильно, то в отладчике откроется окно Module с исходным текстом программы.

6. Запустите программу в отладчике TD в режиме выполнения по шагам, начиная с первой команды до последней. Запишите в отчет содержимое регистров микропроцессора после выполнения первых N команд программы. Число N определяется по выражению:

N= n + 5,

где n – номер используемого компьютера.

7. Повторите операции пунктов 2-6, не используя опции /zi и /v притрансляции и компоновке программы Prg_2.asm. Сделайте вывод о том, как изменился процесс отладки. Вывод запишите в отчет по работе.

8. Установите в программе две точки прерывания на месте i-той и j-ой команды. Номера команд с точками прерывания определяйте по выражениям

i=n+2;

j=n+10,

где n – номер используемого компьютера.

9. Запустите программу на выполнение в режиме безусловного выполнения, записывая содержимое регистров микропроцессора в каждой точке прерывания.

10. Распечатайте и подшейте в отчет файл с листингом программы

Prg_2.lst и файл протокола Prg_2.log.

 

 

Ссылка на основную публикацию
Adblock
detector
",css:{backgroundColor:"#000",opacity:.6}},container:{block:void 0,tpl:"
"},wrap:void 0,body:void 0,errors:{tpl:"
",autoclose_delay:2e3,ajax_unsuccessful_load:"Error"},openEffect:{type:"fade",speed:400},closeEffect:{type:"fade",speed:400},beforeOpen:n.noop,afterOpen:n.noop,beforeClose:n.noop,afterClose:n.noop,afterLoading:n.noop,afterLoadingOnShow:n.noop,errorLoading:n.noop},o=0,p=n([]),h={isEventOut:function(a,b){var c=!0;return n(a).each(function(){n(b.target).get(0)==n(this).get(0)&&(c=!1),0==n(b.target).closest("HTML",n(this).get(0)).length&&(c=!1)}),c}},q={getParentEl:function(a){var b=n(a);return b.data("arcticmodal")?b:(b=n(a).closest(".arcticmodal-container").data("arcticmodalParentEl"),!!b&&b)},transition:function(a,b,c,d){switch(d=null==d?n.noop:d,c.type){case"fade":"show"==b?a.fadeIn(c.speed,d):a.fadeOut(c.speed,d);break;case"none":"show"==b?a.show():a.hide(),d();}},prepare_body:function(a,b){n(".arcticmodal-close",a.body).unbind("click.arcticmodal").bind("click.arcticmodal",function(){return b.arcticmodal("close"),!1})},init_el:function(d,a){var b=d.data("arcticmodal");if(!b){if(b=a,o++,b.modalID=o,b.overlay.block=n(b.overlay.tpl),b.overlay.block.css(b.overlay.css),b.container.block=n(b.container.tpl),b.body=n(".arcticmodal-container_i2",b.container.block),a.clone?b.body.html(d.clone(!0)):(d.before("
"),b.body.html(d)),q.prepare_body(b,d),b.closeOnOverlayClick&&b.overlay.block.add(b.container.block).click(function(a){h.isEventOut(n(">*",b.body),a)&&d.arcticmodal("close")}),b.container.block.data("arcticmodalParentEl",d),d.data("arcticmodal",b),p=n.merge(p,d),n.proxy(e.show,d)(),"html"==b.type)return d;if(null!=b.ajax.beforeSend){var c=b.ajax.beforeSend;delete b.ajax.beforeSend}if(null!=b.ajax.success){var f=b.ajax.success;delete b.ajax.success}if(null!=b.ajax.error){var g=b.ajax.error;delete b.ajax.error}var j=n.extend(!0,{url:b.url,beforeSend:function(){null==c?b.body.html("
"):c(b,d)},success:function(c){d.trigger("afterLoading"),b.afterLoading(b,d,c),null==f?b.body.html(c):f(b,d,c),q.prepare_body(b,d),d.trigger("afterLoadingOnShow"),b.afterLoadingOnShow(b,d,c)},error:function(){d.trigger("errorLoading"),b.errorLoading(b,d),null==g?(b.body.html(b.errors.tpl),n(".arcticmodal-error",b.body).html(b.errors.ajax_unsuccessful_load),n(".arcticmodal-close",b.body).click(function(){return d.arcticmodal("close"),!1}),b.errors.autoclose_delay&&setTimeout(function(){d.arcticmodal("close")},b.errors.autoclose_delay)):g(b,d)}},b.ajax);b.ajax_request=n.ajax(j),d.data("arcticmodal",b)}},init:function(b){if(b=n.extend(!0,{},a,b),!n.isFunction(this))return this.each(function(){q.init_el(n(this),n.extend(!0,{},b))});if(null==b)return void n.error("jquery.arcticmodal: Uncorrect parameters");if(""==b.type)return void n.error("jquery.arcticmodal: Don't set parameter \"type\"");switch(b.type){case"html":if(""==b.content)return void n.error("jquery.arcticmodal: Don't set parameter \"content\"");var e=b.content;return b.content="",q.init_el(n(e),b);case"ajax":return""==b.url?void n.error("jquery.arcticmodal: Don't set parameter \"url\""):q.init_el(n("
"),b);}}},e={show:function(){var a=q.getParentEl(this);if(!1===a)return void n.error("jquery.arcticmodal: Uncorrect call");var b=a.data("arcticmodal");if(b.overlay.block.hide(),b.container.block.hide(),n("BODY").append(b.overlay.block),n("BODY").append(b.container.block),b.beforeOpen(b,a),a.trigger("beforeOpen"),"hidden"!=b.wrap.css("overflow")){b.wrap.data("arcticmodalOverflow",b.wrap.css("overflow"));var c=b.wrap.outerWidth(!0);b.wrap.css("overflow","hidden");var d=b.wrap.outerWidth(!0);d!=c&&b.wrap.css("marginRight",d-c+"px")}return p.not(a).each(function(){var a=n(this).data("arcticmodal");a.overlay.block.hide()}),q.transition(b.overlay.block,"show",1*")),b.overlay.block.remove(),b.container.block.remove(),a.data("arcticmodal",null),n(".arcticmodal-container").length||(b.wrap.data("arcticmodalOverflow")&&b.wrap.css("overflow",b.wrap.data("arcticmodalOverflow")),b.wrap.css("marginRight",0))}),"ajax"==b.type&&b.ajax_request.abort(),p=p.not(a))})},setDefault:function(b){n.extend(!0,a,b)}};n(function(){a.wrap=n(document.all&&!document.querySelector?"html":"body")}),n(document).bind("keyup.arcticmodal",function(d){var a=p.last();if(a.length){var b=a.data("arcticmodal");b.closeOnEsc&&27===d.keyCode&&a.arcticmodal("close")}}),n.arcticmodal=n.fn.arcticmodal=function(a){return e[a]?e[a].apply(this,Array.prototype.slice.call(arguments,1)):"object"!=typeof a&&a?void n.error("jquery.arcticmodal: Method "+a+" does not exist"):q.init.apply(this,arguments)}}(jQuery)}var duplicateMode="undefined"!=typeof duplicateFlatPM&&duplicateFlatPM;document["wri"+"te"]=function(a){var b=document.createElement("div");ff(document.currentScript).after(b),flatPM_setHTML(b,a),ff(b).contents().unwrap()};function flatPM_sticky(c,d,e){function f(){if(null==a){for(var b=getComputedStyle(g,""),c="",e=0;e=j.top-h?j.top-h