2014-12-13 62 views
-2

我试图创建在装配8086显示此程序:想要回答这个8086汇编代码和值吗?

First Name: Nada 
last Name: masoud 

我需要知道如何添加新行的名字:·马苏德

org 100h 

mov ax,0b800h 
mov ds,ax 

linefeed db 13, 10, "$" 

mov [02h], 'F' 
mov [04h], 'i' 
mov [06h], 'r' 
mov [08h], 's' 
mov [0ah], 't' 
mov [0ch], ' ' 
mov [010h], 'N' 
mov [012h], 'a' 
mov [014h], 'm' 
mov [016h], 'e' 
mov [018h], ':' 
mov [01ah], 'N' 
mov [01ch], 'a' 
mov [01eh], 'd' 
mov [020h], 'a' 

mov ah, 09 
mov dx, offset linefeed 
int 21h 

mov ax,0b800h 
mov ds,ax 
mov [0a2h], ' ' 
mov [04h], 'a' 
ret 
+0

我们的教授需要我们使用这种类型的书写代码来显示名字和姓氏和id作为每行的字母,所以我开始第一行,不知道如何添加新行 – 2014-12-13 14:23:29

+0

添加160(0A0h)。忘记int 21h/9和换行 - 他们不会很好地一起打球。无需重置'ds'。看起来你在正确的地方有空间,但回到了'a'的第一行。 – 2014-12-13 15:05:52

+0

所以它开始新行,但我需要做的每个行写我每个字母,我不知道如何重新开始mov [0a0h],'' mov [0a2h],'l' – 2014-12-13 15:16:38

回答

0

一个。您需要完全删除此行,因为它不包含可执行代码,因此会导致程序崩溃!

linefeed db 13, 10, "$" 

b。你有没有注意到你跳过了一个地址?

mov [0ch], ' ' 
mov [010h], 'N' 

c。要求DOS执行换行是因为您直接在视频内存中写入而无用。所以放宽这些线。而且它还是会失败,因为DS并没有指向程序本身!

mov ah, 09 
mov dx, offset linefeed 
int 21h 

d。只要继续这个序列...

mov [0A2h], 'l' 
mov [0A4h], 'a' 
mov [0A6h], 's' 
mov ..........