我想要做的是使用 Emu8086 启动我的程序来调试我的汇编代码,就好像它是通过带有一些参数的命令行启动的一样。使用 DOSBox,我像这样启动我的程序:program.exe result.txt source.txt(result.txt 和 source.txt 是参数),但它没有按预期方式工作,我需要找出原因。如何“模仿”命令行参数传递到 Emu8086 中?
当我尝试声明一个名为"name"的变量时,它不起作用,它给了我一个错误,这一个there are errors.有以下解释
(22) wrong parameters: MOV BL, name
(22) probably no zero prefix for hex; or no 'h' suffix; or wrong addressing; or undefined var: name
Run Code Online (Sandbox Code Playgroud)
这是我的代码
; multi-segment executable file template.
data segment
; add your data here!
pkey db "press any key...$"
name db "myname"
ends
stack segment
dw 128 dup(0)
ends
code segment
start:
; set segment registers:
mov ax, data
mov ds, ax
mov es, ax
; add your code here
MOV BL, …Run Code Online (Sandbox Code Playgroud) 我在上运行以下汇编代码(emu8086):
clearScr macro
mov ah, 06h
mov al, 00h
mov bh, 71h
mov cx, 0000h
mov dx, 184fh
int 10h
clearScr endm
print macro string
mov ah, 09h
lea dx, string
int 21h
print endm
.model small
.stack 100h
.data
msg db 'Hello, world!', '$'
nl db 0AH, 0DH, '$'
myname db 'Ahmed', '$'
.code
main proc
mov ax, @data
mov ds, ax
print myname
clearScr
print msg
mov ax, 4c00h
int 21h
main endp
Run Code Online (Sandbox Code Playgroud)
并且clearScr宏似乎正在移动光标,因为屏幕上打印的最终文本不是从角落开始的。 …
我开始学习Assembly(ASM x86).我正在使用模拟器emu8086.我写了以下说明:
mov eax,3
Run Code Online (Sandbox Code Playgroud)
当我试图模仿指令时,emu8086写道: wrong parameters MOV eax,3. probably it's an undefined var: eax
此外,当我换成eax用ax,ah或al-它的工作就好了.
为什么会那样?我该怎么做才能解决这个问题?谢谢.
我用的是emu8086。我有一个问题,要求我在从六段输入转换后显示我们在七段显示器上看到的内容。我应该以十六进制输入我的数据,如果它与七段表的十六进制输入匹配,则显示十进制数,例如。3FH = 0, 06H = 1。我使用数组来实现这个程序。下面是工作源程序:
\nORG 100H \n\nMOV AL,[1840H] \xef\xbc\x9binput in this memory location\nMOV CL,0AH ; initialize length counter\n \nAGAIN: CMP AL,MSG+BX ; compare to check if the data matches\n JE RESULT ; jump to RESULT if data matched\n INC BX ; increase decimal output by 1 if data not matched\nLOOP AGAIN\n\nMOV [1841H],0FFH ; display FF if no data matched the array\n\nHLT\n\nMSG DB 3FH, 06H, 5BH, 4FH,66H, 6DH,7DH,07H,7FH,6FH ; my array with hexa inputs\n\nRESULT: MOV [1841H],BL ; display …Run Code Online (Sandbox Code Playgroud) 该代码取自在线示例。假设我有要在 DL 中打印的变量。
DISPLAY_HEX PROC NEAR
MOV BL,DL
MOV BH,0
MOV CL,4
SHL BX,CL
MOV DL,BH
CALL ONE_DIGIT
MOV CL,4
SHR BL,CL
MOV DL,BL
CALL ONE_DIGIT
RET
DISPLAY_HEX ENDP
ONE_DIGIT PROC NEAR
CMP DL,9
JA LETTER
ADD DL,48
JMP NEXT
LETTER: ADD DL, 'A'-10
NEXT: MOV AH,02H
INT 21H
END: RET
ONE_DIGIT ENDP
Run Code Online (Sandbox Code Playgroud)
为什么要轮班?不能像小数一样打印吗?另外,为什么这里同时使用SHR和SHL ?
我正在组装游戏,使用EMU8086进行学校项目.在这个游戏中,我需要允许用户输入一个字符串才能进步.当他输入字符串时,他可能会输入错误的内容并使用它backspace来纠正它.问题是backspace将光标移动到前一个字符上,但先前输入的字符仍然存在.为什么退格不清除前一个字符?如何修复程序,以便删除屏幕上的前一个字符?
我的代码是:
data segment
ends
stack segment
dw 128 dup(0)
ends
StringHelper db 20 dup(?)
Line db 13,10,'$'
FullInput db 'You cant type more than 20 letters!!! please try again!!',13,10,'$'
t db '$'
code segment
PROC PrintMessage
;BX MUST have OFFSET OF MESSAGE
; if you want to go down a line do (lea bx,line)
mov dx,bx
mov ah,09h
int 21h
ret
endp printMessage
proc InputString
;askes the user to input chars untill he press (enter) …Run Code Online (Sandbox Code Playgroud) mov ax,10
mov bx,4
mov si,ax
mov ax,bx+si+1
LEA ax,[bx+si+1]
Run Code Online (Sandbox Code Playgroud)
当我一起添加bx,si和1并移动到ax时,结果为0.在下一行,当我使用LEA时,它可以工作,我得到15.
使用移动时为什么我会变零?
我得到了以下代码,我想在每一步之后写下观察结果。代码是:
MOV AL,15
MOV AH,0FFH
XOR AL,AL
MOV CL,3
SHR AX,CL
Run Code Online (Sandbox Code Playgroud)
现在唯一让我困惑的是 SHR 命令。我知道它会将 AX 的值移动 3 倍,但它是如何做到的呢?
我收到了一个作业,需要使用 emu8086 创建游戏。
但问题是我不知道如何绘制精灵。
谁能帮助我向我解释精灵的创建?