我写了一个简单的汇编代码,总结了4个单词
STSEG SEGMENT
DB 32 DUP (?)
STSEG ENDS
DTSEG SEGMENT
DATA_IN DW 234DH,1DE6H,3BC7H,566AH
ORG 100H
SUM DW ?
DTSEG ENDS
CDSEG SEGMENT
MAIN PROC FAR
ASSUME CS:CDSEG,SS:STSEG,DS:DTSEG
MOV AX,DTSEG
MOV DS,AX ; load data segment to DS
MOV CX,04 ; set counter to 4
MOV DI,OFFSET DATA_IN
MOV BX,00 ; this is the sum initialized to 0
ADD_LP: ADD BX,[DI]
INC DI
INC DI ; two INC because we are using words
DEC CX
JNZ ADD_LP
MOV SI,OFFSET SUM …Run Code Online (Sandbox Code Playgroud) 我试图分配变量来注册这里是代码:
ORG 100h
var1 DB 10 ;
var2 DB 20 ;
MOV BX,var1 ; error : operands do not match: 16 bit register and 8 bit address
RET
END
Run Code Online (Sandbox Code Playgroud)
但如果换掉第4行:
MOV BL, var1;
Run Code Online (Sandbox Code Playgroud)
有用.所以我的问题是为什么我不能将8位变量移动到更大的16位寄存器中?
注意:
我是装配新手,我在生成随机数时遇到问题.
我的代码很简单:它在0-25范围内生成100个数字并将它们存储在一个数组中.
我遇到的问题是,当我在emu8086汇编程序上运行con时,它成功运行并生成100个随机数,这些数字存储在数组中.但是当我在它上面运行时masm611,它会每4个周期产生一个新的随机数.这意味着数组中的值对于4个值是连续相同的数字,然后存储下一个随机值.
这是我的代码:
.model small
.stack 100h
.data
range db 25
i db 0 ;iterator
arr db 15 dup(0) ; an array
.code
mov ax,@data
mov ds,ax
mov bx,offset arr ;getting the adress of the arr in bx
L1:
mov ah,2ch
int 21h
mov ah,0
mov al,dl ;using dl by seeing 2ch details
div range ; so the number is in range
mov [bx],ah ;ah has remainder as using 8 bits div and …Run Code Online (Sandbox Code Playgroud) 我正在使用程序集8086emu,我需要一个用于8个数字的数字生成器。我试图通过@johnfound使用这段代码:
RANDGEN: ; generate a rand no using the system time
RANDSTART:
MOV AH, 00h ; interrupts to get system time
INT 1AH ; CX:DX now hold number of clock ticks since midnight
mov ax, dx
xor dx, dx
mov cx, 10
div cx ; here dx contains the remainder of the division - from 0 to 9
add dl, '0' ; to ascii from '0' to '9'
mov ah, 2h ; call interrupt to display a value in DL …Run Code Online (Sandbox Code Playgroud) 我尝试编写一个汇编代码,确定28是否是一个完整的数字.但我有一个问题.当我运行代码时,emu8086无法识别我的标签.
例如,在此代码中:
mov dl,1ch
mov bl,00h ;sum
mov cl,1ch ;counter
dec cl
HERE : mov ax,00h
mov al,dl
div cl ;ax/dl ah=remainder
cmp ah,00h
je SUM ; if ah=0 jump the label SUM
loop HERE
mov dh,00h
cmp dl,bl
je PERFECT
hlt
SUM :
add bl,cl
jmp HERE
PERFECT :
mov dh,01
hlt
Run Code Online (Sandbox Code Playgroud)
当loop HERE指令运行时,emu8086运行mov dl,1ch我的代码的第一条指令().我能做什么?问题是什么?
提前致谢...
我是汇编的新手,想知道如何在EMU8086中编写一个程序,在每次运行时打印一个不同的随机数.是否可以在不使用中断的情况下完成?
我是8086程序集编程的新手,我有一个问题.
我有一个大小约1400个字符的字符串.当我试图定义它时:
.data
mystring DB '(string with 1400 characters)'
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误
"未终止的字符串".
我正在使用emu8086模拟器.我认为我的字符串不适合DB.有没有办法在字节中保留大字符串?
如何使用 TEST 指令(或一系列 TEST 指令)查看 AL 寄存器中的位 0 和位 4 是否都设置为 1?如何使用 TEST 指令查看是否设置了任一位?如何使用 TEST 指令查看是否没有设置任何位?我使用的是 emu8086 汇编器。
我是初学者,所以这段代码可能没什么用,我用过int 16h这个,但我对此了解不多int。我刚刚发现你不能同时敲击多个按键;有什么帮助吗?
这段代码的问题是一次只能移动一块板,而我需要两块板。如何检查多个输入?
这是任何想要它的人的代码:
Run Code Online (Sandbox Code Playgroud)IDEAL MODEL small STACK 100h DATASEG ; -------------------------- ; Your variables here ; -------------------------- line1X dw 80 line1Y dw 120 line1start dw 5 line1end dw 10 line2X dw 80 line2Y dw 120 line2start dw 310 line2end dw 315 CODESEG proc startVideo ;creates video mode mov al,13h mov ah,0h int 10h ret endp startVideo proc clearScrean ;turns the screen black mov ah, 0ch xor al,al mov dx,200 BlankLine: mov cx,320 BlankColumn: int 10h …
当我尝试声明一个名为"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)