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
本来是不想输出回车的,之前以为是未“刷新”输出缓冲区的问题,但是输出回车后依然没变化。
新学汇编,诸位不要见笑
10 个解决方案
#1
loop循环自动递减CX的值, 不需要你手工dec的。
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
#2
如果要显示有回车效果可以加个打印回车符就可以啦
Write:
mov dl,[si]
int 21h
mov dl,0dh
int 21h
inc si
loop Write
#3
我的代码有什么问题吗? 不用loop的话为什么重定向可以看到输出,直接执行程序没有输出呢?重定向输出为什么有一个Invalid keyboard code specified输出呢?
#4
主要问题:
1. 用AX一次移动一个字,就不需要循环7次了。所以改为用AL一次移一个字节。
2. 只有回车没有换行造成的。输出0ah是回车符,它把光标定位到当前行的最左边,换行符0dh则是把光标定位到下一行的同一列上。
你的程序只回车不换行,所以后面的字符把前面的字符都覆盖掉了。
#5
你的程序只回车不换行,所以后面的字符把前面的字符都覆盖掉了。
=====================================================================
不输出回车一样,还是重定向有输出,直接在console下执行无输出,我前面提到的“本来是不想输出回车的,之前以为是未“刷新”输出缓冲区的问题,但是输出回车后依然没变化。”就是说这个意思。
=====================================================================
不输出回车一样,还是重定向有输出,直接在console下执行无输出,我前面提到的“本来是不想输出回车的,之前以为是未“刷新”输出缓冲区的问题,但是输出回车后依然没变化。”就是说这个意思。
#6
刚才办公楼要锁门,没很仔细看。
你的程序最后没有返回OS的指令,执行完你的程序,又执行未知指令去了。
你的程序最后没有返回OS的指令,执行完你的程序,又执行未知指令去了。
#7
这么简单个小程序 整的神神秘秘的
#8
刚才办公楼要锁门,没很仔细看。
你的程序最后没有返回OS的指令,执行完你的程序,又执行未知指令去了
=======================================================================
it really work , thanks
你的程序最后没有返回OS的指令,执行完你的程序,又执行未知指令去了
=======================================================================
it really work , thanks
#9
这么简单个小程序 整的神神秘秘的
=====================================
标题小神秘,下次改正,哈哈
=====================================
标题小神秘,下次改正,哈哈
#10
为什么我没看到这个?
mov ax,4c00h
int 21h
#1
loop循环自动递减CX的值, 不需要你手工dec的。
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
#2
如果要显示有回车效果可以加个打印回车符就可以啦
Write:
mov dl,[si]
int 21h
mov dl,0dh
int 21h
inc si
loop Write
#3
我的代码有什么问题吗? 不用loop的话为什么重定向可以看到输出,直接执行程序没有输出呢?重定向输出为什么有一个Invalid keyboard code specified输出呢?
#4
主要问题:
1. 用AX一次移动一个字,就不需要循环7次了。所以改为用AL一次移一个字节。
2. 只有回车没有换行造成的。输出0ah是回车符,它把光标定位到当前行的最左边,换行符0dh则是把光标定位到下一行的同一列上。
你的程序只回车不换行,所以后面的字符把前面的字符都覆盖掉了。
#5
你的程序只回车不换行,所以后面的字符把前面的字符都覆盖掉了。
=====================================================================
不输出回车一样,还是重定向有输出,直接在console下执行无输出,我前面提到的“本来是不想输出回车的,之前以为是未“刷新”输出缓冲区的问题,但是输出回车后依然没变化。”就是说这个意思。
=====================================================================
不输出回车一样,还是重定向有输出,直接在console下执行无输出,我前面提到的“本来是不想输出回车的,之前以为是未“刷新”输出缓冲区的问题,但是输出回车后依然没变化。”就是说这个意思。
#6
刚才办公楼要锁门,没很仔细看。
你的程序最后没有返回OS的指令,执行完你的程序,又执行未知指令去了。
你的程序最后没有返回OS的指令,执行完你的程序,又执行未知指令去了。
#7
这么简单个小程序 整的神神秘秘的
#8
刚才办公楼要锁门,没很仔细看。
你的程序最后没有返回OS的指令,执行完你的程序,又执行未知指令去了
=======================================================================
it really work , thanks
你的程序最后没有返回OS的指令,执行完你的程序,又执行未知指令去了
=======================================================================
it really work , thanks
#9
这么简单个小程序 整的神神秘秘的
=====================================
标题小神秘,下次改正,哈哈
=====================================
标题小神秘,下次改正,哈哈
#10
为什么我没看到这个?
mov ax,4c00h
int 21h