如何检查程序集8086程序是否运行良好

时间:2015-10-25 08:43:48

标签: debugging memory assembly x86-16

我想将0到9之间的数字放到400h到409h的存储单元中。 例如,在400h - > 0(放0)和401h - > 1(放1)..... 409h(放9)。 到目前为止,这是我的代码:(我不知道它是否有效)

 IDEAL
MODEL small
STACK 100h
DATASEG
;----------

;----------
CODESEG
start:
mov ax , @data
mov ds , ax
mov es, ax
;----------
mov si , 400h
mov cx , 10
mov al , 0
agian:
mov [si],al

inc si
inc al
loop agian
;--------
exit: 
 mov ax,4c00h
 int 21h
 END start 

2 个答案:

答案 0 :(得分:2)

如果你的程序有效,有一种非常简单的方法可以查看。只需在视频内存中写入值即可。这样你就会知道它是否有效。

start:
 mov  ax, 0B800h     ;NEW
 mov  ds, ax
 mov  es, ax
 ;----------
 mov  si, 400h
 mov  cx, 10
 mov  al, 48         ;NEW value 0 -> character 0
agian:
 mov  [si], al
 add  si, 2          ;NEW 1 character occupies 2 bytes in video memory
 inc  al
 loop agian
 mov  ah,00h         ;NEW wait for a keystroke so you can actually see
 int  16h            ;NEW ... the output

如果您可以花时间学习使用DOS实用程序 DEBUG.EXE 。除此之外,它还允许您单步执行程序并查看内存。

答案 1 :(得分:1)

检查ASM代码是否按预期方式运行的最简单方法是在调试器中运行它。如果您在Windows上运行,OllyDbg 2将是一个很好的候选者 - 它将显示寄存器的当前值,堆栈状态等,以便您可以看到它们在您步骤时如何更改通过你的代码。您也可以修改OllyDbg内部的代码。

您可以使用int 3指令在代码中编写断点,或使用调试器在运行时放置断点。