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

wushichao1987 2011-03-08 05:48:35
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

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

新学汇编,诸位不要见笑
...全文
246 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
dgf19880908 2011-03-10
  • 打赏
  • 举报
回复
为什么我没看到这个?

mov ax,4c00h
int 21h
wushichao1987 2011-03-10
  • 打赏
  • 举报
回复
这么简单个小程序 整的神神秘秘的
=====================================
标题小神秘,下次改正,哈哈
wushichao1987 2011-03-10
  • 打赏
  • 举报
回复
刚才办公楼要锁门,没很仔细看。

你的程序最后没有返回OS的指令,执行完你的程序,又执行未知指令去了
=======================================================================
it really work , thanks
znxllyuan 2011-03-09
  • 打赏
  • 举报
回复
这么简单个小程序 整的神神秘秘的
shzhfu 2011-03-09
  • 打赏
  • 举报
回复
刚才办公楼要锁门,没很仔细看。

你的程序最后没有返回OS的指令,执行完你的程序,又执行未知指令去了。
wushichao1987 2011-03-08
  • 打赏
  • 举报
回复
你的程序只回车不换行,所以后面的字符把前面的字符都覆盖掉了。
=====================================================================
不输出回车一样,还是重定向有输出,直接在console下执行无输出,我前面提到的“本来是不想输出回车的,之前以为是未“刷新”输出缓冲区的问题,但是输出回车后依然没变化。”就是说这个意思。
shzhfu 2011-03-08
  • 打赏
  • 举报
回复
[Quote=引用楼主 wushichao1987 的回复:]
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
STA……
[/Quote]
主要问题:

1. 用AX一次移动一个字,就不需要循环7次了。所以改为用AL一次移一个字节。

2. 只有回车没有换行造成的。输出0ah是回车符,它把光标定位到当前行的最左边,换行符0dh则是把光标定位到下一行的同一列上。

你的程序只回车不换行,所以后面的字符把前面的字符都覆盖掉了。
wushichao1987 2011-03-08
  • 打赏
  • 举报
回复
我的代码有什么问题吗? 不用loop的话为什么重定向可以看到输出,直接执行程序没有输出呢?重定向输出为什么有一个Invalid keyboard code specified输出呢?
masmaster 2011-03-08
  • 打赏
  • 举报
回复
如果要显示有回车效果可以加个打印回车符就可以啦

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

masmaster 2011-03-08
  • 打赏
  • 举报
回复
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

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧