在8086中有AX,BX,CX,DX四个通用数据寄存器,他们既可以作为一个16位(DW型)寄存器,也可以分别作为两个8位寄存器使用,低8位分别是AL,BL,CL,DL,高8位分别为AH,BH,CH,DH。
你把要处理的DW型数(如0187H)存到16位寄存器中(如AX),则AH=01H,AL=87H,接下来你就可以直接使用AH中的高八位了,这是比较简单的。如果你是从存储单元获得数据,可以通过字节读取数据直接获得。
楼主所需程序如下:
图A为源程序;(注明:绿色指令(被注释的程序)为屏幕显示输出程序,楼主可要可不要,若去除注释符号“;”则在屏幕上输出显示0的统计个数。)
图B为调试过程中,在程序执行完毕退出前查询内存的存储情况。因为程序数据段定义的时候定义了19个0,所以内存中存储统计的个数为13H个,即19个。
图A:(源程序)
图B:(debug)
汇编语言是一种直接控制 CPU 运行的低级语言,主要用于描述和控制计算机硬件的运作。ROM2000H单元则可能是某个具体电子设备中的部件,如果您可以提供更多信息,我可以为您做出更准确的回答。
大家点点关注,后续有疑问可直接评论区问我,有空的话会给大家整理更详细的信息~
DATA SEGMENT
DATA1 DB 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
DATA2 DB 10H DUP()
DATA ENDS
;
STACK SEGMENT PARA STACK 'STACK'
DB 100 DUP()
STACK ENDS
;
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV BX,DATA
MOV DS,BX
MOV ES,BX
MOV SI,OFFSET DATA1
MOV DI,OFFSET DATA2
MOV CX,16
REP MOVSB
RET
CODE ENDS
END START
运行后没有错误 ,你的乱码是怎么回事?另外
MOV AL,0
MOV CX,16
NEXT: MOV [SI],AL
INC AL
INC SI
LOOP NEXT
是做什么用的?
程序1:
MOV R0, #32H ;设地址指针的初值
CONT: CJNE @R0,#0AAH , NEXT ;比较查找值与指针所指单元的值,是否相等
MOV A, #0FFH ;相等,赋值0FFH
SJMP DOWN ;跳转到,保存结果
NEXT: INC R0 ;修改地址指针
CJNE R0, #42H, CONT ;指针没有超过范围,则继续
MOV A, #00H ;查找失败,将00H存入结果
DOWN: MOV 50H, A ;将比较结果存入50H单元
SJMP $ ;暂停
END
程序2:
MOV R7, #16 ;计数器赋初值,从20H~30H共16个字节
MOV R0, #32H
CONT: CJNE @R0,#0AAH , NEXT
MOV A, #0FFH
SJMP DOWN
NEXT: INC R0
DJNZ R7, CONT ;计数器减1,非零,则继续查找
MOV A, #00H
DOWN: MOV 50H, A ;将比较结果存入50H单元
SJMP $
END
以上就是关于汇编语言中取一个DW型数的高八位,如何实现全部的内容,包括:汇编语言中取一个DW型数的高八位,如何实现、汇编语言 数据段中有50个字型数据,统计其中0的数并把统计结果存在存储单元中、汇编语言将ROM2000H单元处表格内容送到等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)