麻烦会汇编语言的大侠帮我看一下下面的代码出错在哪里。。。在线等。。。
;下面的代码是输入15个数字,然后原样输出的简单汇编程序
;编译和连接都没有错啊,为啥不能输出15个数字呢???
data segment
ts1 db 'Please input the 15 numbers:',0ah,0dh,'$'
str1 db 15 dup(0),0ah,0dh,'$'
ts2 db 0ah,0dh,'The exchanged 15 numbers is :',0ah,0dh,'$'
data ends
code segment
assume cs:code,ds:data,es:data
start:
mov ax,data
mov ds,ax
mov es,ax
lea dx,ts1
mov ah,09h
int 21h
mov cx,15
mov si,1
lop1: mov ah,01h
int 21h
mov str1[si],al
inc si
call kg ;过程调用,输出空格
loop lop1
lea dx,ts2
mov ah,09h
int 21h ;输出提示信息
mov cx,15
mov si,1
lop2: mov al,str1[si] ;原样输出15个数字,结果无法输出!!!原因在哪呢?
mov dl,al
mov ah,02h
call kg ;过程调用,输出空格
int 21h
inc si
loop lop2
mov ah,4ch
int 21h
kg proc near
mov dl,' '
mov ah,02h
int 21h
ret
kg endp
code ends
end start
答案:给的分太少了
其他:;修改完毕,已测试
DATA SEGMENT
TS1 DB 'PLEASE INPUT THE 15 NUMBERS:',0AH,0DH,'$'
STR1 DB 15 DUP(0),0AH,0DH,'$'
TS2 DB 0AH,0DH,'THE EXCHANGED 15 NUMBERS IS :',0AH,0DH,'$'
DATA ENDS
STACK SEGMENT USE16 STACK
DB 200 DUP(0)
STACK ENDS ;****缺少堆栈段
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK ;****缺少堆栈段
START:
MOV AX,DATA
MOV DS,AX
MOV ES,AX
LEA DX,TS1
MOV AH,09H
INT 21H
MOV CX,15
MOV SI,0 ;****注意从0开始
LOP1: MOV AH,01H
INT 21H
MOV STR1[SI],AL
INC SI
CALL KG
LOOP LOP1
LEA DX,TS2
MOV AH,09H
INT 21H
MOV CX,15
MOV SI,0 ;****注意从0开始
LOP2: MOV AL,STR1[SI]
MOV DL,AL
MOV AH,02H
INT 21H ;****注意这两条指令不要分开
CALL KG
INC SI
LOOP LOP2
MOV AH,4CH
INT 21H
KG PROC NEAR
MOV DL,' '
MOV AH,02H
INT 21H
RET
KG ENDP
CODE ENDS
END START 你这个程序的错误修改好了,bl和bh里面分别是A、B数组的长度。
应该完全符合你的要求。
winder segment
a db 'luoyao 20101120101$'
b db 2h dup(0h,0h,0h,0h,0h)
c dw offset a,offset b
org 0200h
d db ?
winder ends
cod segment
assume cs:cod, ds:winder
start:
mov ax,winder
mov ds,ax
lea dx,a
mov ah,9h
int 21h
mov bl,b+7h
mov d,bl
mov bl,b-a
mov bh,c-b
lea dx,c
mov ah,4ch
int 21h
cod ends
end start
随便说一下,你对size这个操作符的理解有问题。
代码有问题
上一个:用单片机汇编语言求:1、统计一串数据中正数负数的个数(不包括零)
下一个:从键盘输入一个数n 采用子程序调用及子程序递归实现求x=n!的值并显示结果。要求用汇编语言编写