+ -
当前位置:首页 → 问答吧 → 输出很多字符串的方法(汇编),讨论下,答者有(份)分!!!!

输出很多字符串的方法(汇编),讨论下,答者有(份)分!!!!

时间:2011-01-10

来源:互联网

现在有两种输出字符串的方法,一种是调用21号中断09h,此方法为输出简短的字符串,结尾以$结束,适合少量字符串输出。
第二种方法为调用10号中断13h,此方法可以输出大量字符串(把要输出字符串写在一起table),缺点就是字符串的长度要指定,不然会出错。那有没有一种方法,既能大量输出字符串,又能不指定长度的方法吗?
比如,我要输出字符如下: afdfafasgagagaga:fdkafkjafkjfkslafjklsafjsklafjaskfjaffjalkfjaflfjakfaf:,
afasgaghd;gjaoeirjgalgjaigjagjalgja;
afjalfjalfjasfljsaflkjaflkafa;fasfaf:,ajdfakljfalkjglkajflaksfjasf:,sdfjas;fljaskfljsadflkjsalkfjalfjsalkfja:,
有没有一种简单方法,可以这样:char_table db lakfjalkfjlakfjlfjlafjlaf
  db fjalkfjslakfjalsfjasflkjflkjaflkjaflkk
  db fjslfkjalskfjlsafkjalksfjalsfjlasfj
  db weoiujoj lgjm;z/jfaogaojgaeogjadlggjklagoeigjaelkgj
这样输出呢?或许还有更简单的?

作者: zhuyi108   发布时间: 2011-01-10

用2号功能也可以。
Assembly code

;
;This Program Compiled Sucess by Masm 6.15
;
assume  cs:code,ds:data
data    segment
char    db      'sferwerwersdfjsd;lf',0dh,0ah,'j;werwerouwierjl;sdfj,'
        db      'sdjfwoerjowejrlwerj;wler;werew.'
        db      'sdfjowerjowerowerweoruwerwe;rwejr;'
        db      '234suodfj2930mnof0sdflsdkf'
data    ends
code    segment
start:
        mov ax,data
        mov ds,ax
        mov bx,offset char
        mov ah,2
disp:
        cmp byte ptr [bx],0
        jz ok
        mov dl,[bx]
        int 21h
        inc bx
        jmp disp
ok:
        mov ah,4ch
        int 21h
code    ends
end     start

作者: masmaster   发布时间: 2011-01-10

引用楼主 zhuyi108 的回复:
现在有两种输出字符串的方法,一种是调用21号中断09h,此方法为输出简短的字符串,结尾以$结束,适合少量字符串输出。
第二种方法为调用10号中断13h,此方法可以输出大量字符串(把要输出字符串写在一起table),缺点就是字符串的长度要指定,不然会出错。那有没有一种方法,既能大量输出字符串,又能不指定长度的方法吗?
比如,我要输出字符如下: afdfafasgagagaga:fdkafkjaf……

再长的字符串也的有个结束的标志吧。我试过21号中断09h功能,只受段长度的限制,没有额外的长度限制。
Assembly code

c segment
assume cs:c,ds:d,ss:s
start:
mov ax,d
mov ds,ax
mov ah,9
lea dx,b
int 21h
mov ah,4ch
int 21h
c ends

d segment
b db 0fff0h dup('a'),'12345678901234$'
d ends

s segment stack
 dw 300 dup(?)
s ends

end start

作者: shzhfu   发布时间: 2011-01-10

哈哈木叶又浮出水面了

 不懂,来围观学习的

作者: JustFromHell   发布时间: 2011-01-10

引用 2 楼 shzhfu 的回复:
引用楼主 zhuyi108 的回复:
现在有两种输出字符串的方法,一种是调用21号中断09h,此方法为输出简短的字符串,结尾以$结束,适合少量字符串输出。
第二种方法为调用10号中断13h,此方法可以输出大量字符串(把要输出字符串写在一起table),缺点就是字符串的长度要指定,不然会出错。那有没有一种方法,既能大量输出字符串,又能不指定长度的方法吗?
比如,我要输出字符如下: afdfaf……

你误解了,我意思是很多字符串(他们之间没关联),长度不一,问题是要很方便简单的按照你的意图输出这些长度不一很多个字符串,要是一个一个用21号09h中断你觉得不麻烦吗?

作者: zhuyi108   发布时间: 2011-01-10

引用 1 楼 masmaster 的回复:
用2号功能也可以。

Assembly code

;
;This Program Compiled Sucess by Masm 6.15
;
assume cs:code,ds:data
data segment
char db 'sferwerwersdfjsd;lf',0dh,0ah,'j;werwerouwierjl;sdfj,'
……

你这个方法不错,但是有个问题,字符串全部连在一起输出了,可是字符如果之间没有联系,我想让他在屏幕什么地方输出就输出,这个的话,就得不偿失了~

作者: zhuyi108   发布时间: 2011-01-10

热门下载

更多