8086汇编如何打印寄存器内数值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8086汇编如何打印寄存器内数值相关的知识,希望对你有一定的参考价值。

比如我ax中的数值为1024,如何将它打印在屏幕上啊

代码如下:
CODES SEGMENT
ASSUME CS:CODES,DS:CODES
START: MOV AX,CODES
MOV DS,AX
MOV SI,offset X
xor dx,dx
MOV AX,65535 ;可以是0~65535之间任意数值
mov bx,ax ;被除数备份
MOV CX,5 ;循环5次
l1:div word ptr [SI] ;字除
push dx ;余数压栈
CMP CX,1
JZ l2 ;被除数为0时确保有输出
cmp dx,bx
jz skip ;不输出前面的0
l2: mov dl,al
OR DL,30H
mov ah,02h
int 21h ;输出
skip: pop ax ;余数出栈
xor dx,dx
add SI,2
LOOP l1
MOV AH,0
INT 16H
MOV AX,4C00H
INT 21H
X DW 10000,1000,100,10,1
CODES ENDS
END START
参考技术A CODES SEGMENT
ASSUME CS:CODES,DS:CODES
START: MOV AX,CODES
MOV DS,AX
MOV SI,offset X
xor dx,dx
MOV AX,65535 ;可以是0~65535之间任意数值
mov bx,ax ;被除数备份
MOV CX,5 ;循环5次
l1:div word ptr [SI] ;字除
push dx ;余数压栈
CMP CX,1
JZ l2 ;被除数为0时确保有输出
cmp dx,bx
jz skip ;不输出前面的0
l2: mov dl,al
OR DL,30H
mov ah,02h
int 21h ;输出
skip: pop ax ;余数出栈
xor dx,dx
add SI,2
LOOP l1
MOV AH,0
INT 16H
MOV AX,4C00H
INT 21H
X DW 10000,1000,100,10,1
CODES ENDS
END START本回答被提问者和网友采纳
参考技术B ;这是自动生成的代码模板
STACKS SEGMENT STACK ;堆栈段
DW 128 DUP(?) ;注意这里只有128个字节
STACKS ENDS
DATAS SEGMENT ;数据段
TEMP DB 4 DUP(?)

DATAS ENDS
CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS
START: MOV AX,DATAS ;初始化
MOV DS,AX
;请在这里添加您的代码
MOV SI,0
MOV AX,1024D
MOV BL,0AH
MOV CX,4
NEXT: DIV BL
MOV TEMP[SI],AH
INC SI
AND AH,0
LOOP NEXT
DEC SI
MOV CX,4
DIS: MOV DL,TEMP[SI]
ADD DL,30H
MOV AH,02
INT 21H
DEC SI
LOOP DIS

MOV AX,4C00H ;退出程序
INT 21H
CODES ENDS
END START
参考技术C 不管白猫黑猫,抓住老鼠就是好猫,何必限定只能用汇编?
用C语言夹带汇编特别简单:
//打印寄存器AX内容
# include <stdio.h>
short a;
void main()

_asm mov a,ax
printf("AX=%d\n",a);
参考技术D DSPAX PROC
PUSH BX
PUSH CX
PUSH DX
PUSH BP

MOV BP,SP
MOV BX,10
XOR DX,DX
LOP:
DIV BL
OR AH,30H
MOV DL,AH
PUSH DX
XOR AH,AH
MOV CX,AX
JCXZ ENDDECODE
JMP LOP
ENDDECODE:
SUB BP,SP
MOV CX,BP
MOV AH,2
DSP:
POP DX
INT 21H
LOOP DSP

POP BP
POP DX
POP CX
POP BX
DSPAX ENDP

汇编语言内嵌编程



movl:传值,类似于C语言的赋值操作符,result:%0,input:%1。
将input赋给result,打印结果result为1,input还是为1。


操作寄存器相当于操作相关联的C语言变量

交换a、b变量的值:

24行:强制a寄存器关联a变量,b寄存器关联b变量
21-23行:交换a、b值的汇编写法,eax:a寄存器,其他类似






使用Linux系统调用打印字符串
在printf(“main end”)前加入以下代码:


并没有打印main end
因为这段汇编结束当前进程了

以上是关于8086汇编如何打印寄存器内数值的主要内容,如果未能解决你的问题,请参考以下文章

8086 汇编

8086汇编语言基础学习——8086微机基础

8086汇编语言学习 8086标志寄存器

8086汇编 段寄存器

8086汇编学习之代码段数据段栈段与段地址寄存器

汇编-8086内部寄存器+对段寄存器使用的约定