我试图建立一个汇编代码,它要求一个字符串,开始打印字符串的位置以及要打印的期望长度。 假设开始和长度始终有效你能帮我确定开始和长度吗?以开始和长度汇编语言打印一个字符串
如何它应该工作:
Enter String: Hello World
Enter Start: 3
Enter Length: 5
Mid-String: llo W
所以我对如何确定字符串的开始和长度的问题。我试了好几种东西在我下面的代码所示:
.model small
.stack
.data
msg1 db "Enter String:$"
msg2 db 13,10,"Enter Start:$"
msg3 db 13,10,"Enter Length:$"
msg4 db 13,10,"Mid-String:$"
nwln db 13,10
mySample label byte
maxlen db 10
actlen db 0
string db 19 dup (?)
.code
mov ax,@data
mov ds,ax
lea dx, msg1 ;print msg1
mov ah,9
int 21h
lea dx,mySample ;accept string
mov ah,0Ah
int 21h
mov bh,0
mov bl,maxlen
mov string[bx],'$'
mov ah,9
lea dx,string ;print string accept
int 21h
lea dx, msg2 ;print msg2 and accept start
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov bh,0
mov bl,al
lea dx, msg3 ;print msg3 and accept length
mov ah,9
int 21h
mov ah,1
int 21h
sub al,30h
mov dl,al
;mov maxlen,dl
mov bh,0
mov bl,maxlen
mov string[bx],'$'
lea dx,msg4 ;print msg4
mov ah,9
int 21h
lea dx,string ;print mid-string
int 21h
mov ah,4ch
int 21h
END
当您在调试器中单步执行此操作时,您所读取的数字实际上是否像您期望的那样寄存在寄存器中?最后一次“int 21h”之前寄存器中的值是你期望它们的值吗?如果不是,则向后查找事情的第一次停止行为,就像你期望的那样。 –
Chouny,你的问题有一个新的答案,检查出来! –