汇编语言程序设计实例
第一题:mov cl,0
mov ch,17
next:dec ch
je exit
mov bx,0
shl ax,1
rol bx,1
cmp bx,0
jz next
inc cl
jmp next
exit:mov ah,4ch
int 21h
第二题:
mov cx,10
mov si,offset buffer
next:mov bx,word ptr[si]
inc bx
mov word ptr[si],bx
inc si
inc si
loop exit
jmp next
exit: mov ah,4ch
int 21h
你的问题问的不对,寄存机 AX BX CX DX就是具体的数据,你可以把这些当成变量使用
a,b,c,d在程序中是分配的内存空间,和寄存器存在着本质上的区别,所以这些题目使用的数据就是:AX,BX,CX,DX这些寄存器数据
1、交换可以用堆栈进行,
AX。BX相互交换内容
PUSH AX
PUSH BX
POP AX
POP BX
这样AX和BX内容就交换了
2、
为了方便你理解,写一些不正确的表达式吧
MOV AX,0相当于 int a=0
XOR AX,AX XOR这个指令,如果后面两个数相同,则为0,并将0存放到第一个寄存器AX中
SUB AX,AX 相当于 int a=1 a=a-a所以结果也是0
AND AX,0AND指令,将后面两个数据按位‘与’操作,只要有一个数为0,结果就为0,所以AX的结果就是0了。
第三题看不懂什么意思,想问什么东西?
4、
内存复制的代码:
mov si,offset setscreen原数据偏移地址
mov di,0目标偏移地址
mov cx,offset setscreen_end-offset setscreen 计算出数据长度
cld di,si每次执行movsb的时候都递增1
rep movsb 开始复制
清零:
如果数据段有一块内存需要清零
mov cx,100 //数据段长度
mov si,0//开始地址
mov al,0
_start:
mov byte ptr ds:[si],al
dec cx
inc si // 指向下一个字节
cmp cx,0
jnz _start //如果cx不为0事继续清空下一个内存
百度【幽灵代码论坛】加入我们一起学习
要求:主程序利用寄存器把AX的值传送给子程序。
在子程序中将AX中的值以十六进制形式显示。
=====================================
DATA SEGMENT
D1 DW 13276 数: 0~65535
DATA ENDS
------------------------------
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
------------------------------
MOV AX, D1取来数字.
CALL DISP_AX
MOV DL, 'H'
MOV AH, 2
INT 21H 输出H
------------------------------
MOV AH, 4CH
INT 21H 返回DOS
------------------------------
DISP_AX:
MOV BX, 1616进制,要除16
MOV CX, 4 求4位16进制数.
ABC:
CWD将AX扩展到DX
DIV BX
PUSH DX保存余数到堆栈.
LOOP ABC
MOV CX, 4 显示4位.
ASD:
POP DX
CMP DL, 10
JB A48
ADD DL, 7
A48:
ADD DL, 48
MOV AH, 2
INT 21H 输出.
LOOP ASD
RET
------------------------------
CODE ENDS
END START
===========================
2.编写子程序,完成的功能是将DL中的2位十六进制数转换为对应ASCII码。
说明:入口参数AL=待转换的2位十六进制数
出口参数DX=转换后的ASCII码,(高字节对应高位、低字节对应低位)
举例:若AL=2AH,则DX=3241H。
0----9转换为30H----39H +30H
A---F转换为41H----4FH +30H+7H
------------------------------
AL_ASC_DX:
MOV AH, 0 要除16
MOV CL, 16求16进制数.
DIV CL
CMP AL, 10
JB A48
ADD AL, 7
A48:
ADD AL, 48
MOV DH, AL
CMP AH, 10
JB A482
ADD AH, 7
A482:
ADD AH, 48
MOV DL, AH
RET
------------------------------
CODE SEGMENT
STR DB '01268ACE'
START:
MOV AH, 7
INT 21H
CMP AL, '0'
JBIN_X
CMP AL, '7'
JAIN_X
MOV DL, AL
MOV AH, 2
INT 21H
AND DL, 15
MOV BL, DL
MOV BH, 0
MOV DL, CS:STR[BX]
INT 21H
MOV AH, 4CH
INT 21H
CODE ENDS
END START