+ -
当前位置:首页 → 问答吧 → 新学汇编,int 21h求助 ,8086 16位汇编

新学汇编,int 21h求助 ,8086 16位汇编

时间:2011-03-08

来源:互联网

Assembly code
stack segment stack
    db 200 dup(0)
stack ends

data segment
    bufA db 'abcdefg'
    bufB db 20 dup(0)
data ends

code segment
    assume cs:code , ds:data , ss:stack
START:
    mov ax , data
    mov ds , ax
    mov cx , 7
    lea si , bufA
    lea di , bufB
L:    
    mov ax , [si]
    mov [di] , ax
    inc di
    inc si
    dec cx
    jne L

    mov cx , 7
    lea di , bufB
WRITE:
    mov dl , [di]
    mov ah , 2h
    int 21h
    
    mov dl,0ah
    mov ah , 2h
    int 21h
    
    inc di 
    dec cx
    jne WRITE
code ends
end START


上述代码的目的是拷贝buffA到bufferB,并将bufferB中的字符输出。
两个问题:
1. 上述代码第一次汇编后执行输出一堆乱码,之后执行无任何输出。
2. 使用重定向命令可看到输出,汇编后可执行文件为 asm.exe , 则asm.exe > t.txt命令后,txt文件有输出,输出内容为
Invalid keyboard code specified
a
b
c
d
e
f
g

本来是不想输出回车的,之前以为是未“刷新”输出缓冲区的问题,但是输出回车后依然没变化。

新学汇编,诸位不要见笑

作者: wushichao1987   发布时间: 2011-03-08

loop循环自动递减CX的值, 不需要你手工dec的。
Assembly code
start:
        mov ax,data
        mov ds,ax
        mov cx,7
        lea si,bufA
        lea di,bufB
L:
        mov al,[si]
        mov [di],al
        inc si
        inc di
        loop L

        mov cx,7
        mov ah,2
        lea si,bufB
Write:
        mov dl,[si]
        int 21h
        inc si
        loop Write

作者: masmaster   发布时间: 2011-03-08

如果要显示有回车效果可以加个打印回车符就可以啦

Assembly code
Write:
        mov dl,[si]
        int 21h
        mov dl,0dh
        int 21h
        inc si
        loop Write

作者: masmaster   发布时间: 2011-03-08