永发信息网

一个汇编程序的理解

答案:1  悬赏:60  手机版
解决时间 2021-06-01 10:20
  • 提问者网友:山高云阔
  • 2021-05-31 14:58

DATA SEGMENT

ARRY1 DB 34H,37H,6EH,0C2H,55H,16H,9FH

LEN EQU $ - ARRY1 ;

RES1 DB LEN DUP(0)

DATA ENDS

STACK1 SEGMENT STACK

DW 40H DUP(0)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK1

BEGIN:MOV AX,DATA

MOV DA,AX

XOR BX,BX ;

MOV CX,LEN ;

JCXZ EXIT1 ;

LOP1: PUSH CX ;

MOV CX,8 ;

MOV AL,ARRY1[BX] ;

LOP2: SHR AL,1 ;

JC L1 ;

JMP L3 ;

L1: INC RES1[BX] ;

L3: LOOP LOP2 ;

POP CX ;

INC BX

LOOP LOP1 ;

MOV AH,4CH

INT 21H

CODE ENDS

END BEGIN

那位能在上面这个汇编程序有分号的地方在分号后面解释一下对应那行代码的意思,然后再总体解释一下这个程序的功能及用法等,麻烦尽量详细点,谢谢。

最佳答案
  • 五星知识达人网友:千夜
  • 2021-05-31 15:59

LEN EQU $ - ARRY1 ;EQU是相当于的意思,$是当前地址,$-ARRY1就相当于求ARRY1的长度,即LEN=7


XOR BX,BX ;指令XOR时求异或的意思,如果原操作数和目的操作数相同则结果为0并送给目的操作数,如果不同则为1,并送给目的操作数


MOV CX,LEN ;这句是数据传送,将LEN送给CX,在这里将需要循环的次数送给CX,CX是专门存放循环次数的寄存器


JCXZ EXIT1 ;如果CX不等于1,这跳转到EXIT1


LOP1: PUSH CX ;将CX的值送入堆栈


MOV CX,8 ;将立即数8送给CX


将从ARRY1开始的偏移量为[BX]的内容送给AL


LOP2: SHR AL,1 ;将AL右移以为,例如AL的值为0100 1001执行这条指令后就是0010 0100移除的一位送入标志寄存器CF


JC L1 ;CF=1,则跳转到L1


如果上一条指令不执行则跳转到L3


L1: INC RES1[BX] ;将从RES1偏移量为[BX]的内容加一


L3: LOOP LOP2 ; 循环LOP2


POP CX ;将栈顶的内容送给CX


LOOP LOP1 ;循环LOP1












我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯