sidfate 发表于 2013-11-23 21:05:14

汇编LOOP和CX的问题,求抱大腿

以下是书本标准代码:
ASSUME CS:CODES
codes segment
START:
    mov ax,0ffffh
    mov ds,ax
    mov bx,0
    mov dx,0
    mov cx,12
s:mov al,
    mov ah,0
    add dx,ax
    inc bx
    loop s
    mov AH,4CH
    int 21H
CODES ENDS
    END START
然后我修改成以下(只修改LOOP ):
ASSUME CS:CODES
codes segment
START:
    mov ax,0ffffh
    mov ds,ax
    mov bx,0
    mov dx,0
    mov cx,12
s:mov al,
    mov ah,0
    add dx,ax
    loop s然后程序就报错了,求解

LinuxDeepin 发表于 2013-11-23 21:48:46

cx 不能做为 寻址 使用

s: mov al, 这一行是错误的,正确的写法如下:

mov al,
mov al,
mov al,
mov al,

尽处叹飘零 发表于 2013-11-23 23:40:10

LinuxDeepin 发表于 2013-11-23 21:48 static/image/common/back.gif
cx 不能做为 寻址 使用

s: mov al, 这一行是错误的,正确的写法如下:


我想把bcd变量中2个字节的bcd码转化为4个字节的bcd码,请懂的帮忙
code      segment
      assume cs:code
bcd db         12h,34h
bcd2         db 0,0,0,0
start:         mov al,bcd

接下来怎么编?
我来回答

ソ孤单背影 发表于 2013-11-23 23:51:45

对于8086的系统:
1.寄存器按照功能的不同可分为通用寄存器(AX,BX,CX,DX,SP,BP,SI,DI。其中的前四个寄存器可分别分成AH,AL ;BH,BL;CH,CL;DH,DL的八位寄存器)、指令指针寄存器(IP)、标志寄存器(FLAGS)、段寄存器(CS,DS,ES,SS)。它们的区别和联系体现在它们的功能上,对它们的深入了解和正确运用需要通过编写程序来实现。
2.大致功能如下:
AX,可存放一般数据,而且可作为累加器使用;
BX,可存放一般数据,而且可用来存放数据的指针(偏移地址),常常和DS寄存器连用;
CX,可存放一般数据,而且可用来做计数器,常常将循环次数用它来存放;
DX,可存放一般数据,而且可用来存放乘法运算产生的部分积,或用来存放输入输出的端口地址(指针);
SP,用于寻址一个称为堆栈的存储区,通过它来访问堆栈数据;
BP,可存放一般数据,用来存放访问堆栈段的一个数据区,作为基地址;
SI,可存放一般数据,还可用于串操作中,存放源地址,对一串数据访问;
DI,可存放一般数据,还可用于串操作中,存放目的地址,对一串数据访问;
IP,用于寻址当前需要取出的指令字节,程序员不能对它直接操作;
FLAGS,用于指示微处理器的状态并控制它的操作;
CS,代码段寄存器,代码段是一个存储区域,存放的是CPU要使用的代码,CS存放代码段的段基地址;
DS,数据段寄存器,数据段是包含程序使用的大部分数据的存储区,DS中存放数据段的段基地址;
ES,附加段寄存器,附加段是为某些串操作指令存放目的操作数而附近的一个数据段,ES中存放该数据段的段基地址;
SS,堆栈段寄存器,堆栈段是内存中一个特殊的存储区,用于暂时存放程序运行时所需的数据或地址信息。SS中存放该存储区的段基地址

lovebite 发表于 2013-11-24 12:47:45

ソ孤单背影 发表于 2013-11-23 23:51 static/image/common/back.gif
对于8086的系统:
1.寄存器按照功能的不同可分为通用寄存器(AX,BX,CX,DX,SP,BP,SI,DI。其中的前四 ...

恩恩 顶起{:1_1:}

sidfate 发表于 2013-11-24 21:27:59

LinuxDeepin 发表于 2013-11-23 21:48 static/image/common/back.gif
cx 不能做为 寻址 使用

s: mov al, 这一行是错误的,正确的写法如下:


谢!!回去抄写100遍
页: [1]
查看完整版本: 汇编LOOP和CX的问题,求抱大腿