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汇编如何打印寄存器内数值的主要内容,如果未能解决你的问题,请参考以下文章