汇编实验三(3)

2018-12-22 22:49

jl l3 // bl小于0,跳到L3地址 cmp bl,0 //比较bl与0的大小 jg l4 //bl大于0,跳到L4地址 mov bl,0 //bl等于0

mov [di],bl //把bl的内容放在[di]中 jmp l2 //跳到L2中 l3: mov bl,-1 //bl=-1

mov [di],bl //把bl的内容放在[di]中 jmp l2 //跳到L2中 l4: mov bl,1 //bl=1

mov [di],bl //把bl的内容放在[di]中 l2: inc si //si+1 inc di //di+1 dec cx //cx-1 cmp cx,0

jz done jmp l1 done:mov ah,4ch int 21h csej ends end start

c.运行结果:

(8) 数据段中的三个字符,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。单步执行,观察SP、IP的变化,并用D命令查看栈顶的内容。

DATA SEGMENT MAG DB 'ABC' DATA ENDS

STACK_SEG SEGMENT DB 100 DUP(?) TOS LABEL WORD

STACK_SEG ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA, SS: STACK_SEG START: MOV AX, STACK_SEG MOV SS, AX MOV SP, OFFSET TOS MOV AX, DATA MOV DS, AX MOV SI, 0 MOV CX, 3 LL: MOV DL, MAG[SI] CALL MADD INC SI LOOP LL MOV Ax, 4C00H INT 21H MADD PROC MOV AH, 02H INT 21H RET MADD ENDP CODE ENDS END START

a.单步执行程序,如下:

从图中可以看出,在执行call命令前,SP一直保持0064不变而IP持续增加。

在RET前从上图中可以看出,当程序在SP、IP每次都是分别按2和1递增,当运行到RET时,SP还是按照2来递增,而IP缺减少了,说明指针回撤执行下一个循环。

上图为 用d命令查看栈顶内容 程序执行结果:

(9) 将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元,如二进制数10010011转换成字符串为‘10010011’。要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8位和16位二进制数的转换。(用寄存器或变量实现参数传递)

测试数据:Var8bit byte 10010011B Var16bit word 1010001111000100B 显示单元:Show8bit byte 8 dup (?) Show16bit byte 16 dup (?) 程序代码:

data segment

Var8bit db 93h

Var16bit dw 0a3c4h Show8bit db 8 dup (?) Show16bit db 16 dup (?) data ends

code segment

assume cs:code, ds:data

main proc

start:

mov ax,data mov ds,ax mov dl,Var8bit mov cx,8 lea si,Show8bit call btrascii mov [si],byte ptr 0dh mov [si+1],byte ptr 0ah mov [si+2],byte ptr '$' lea dx,Show8bit mov ah,9h int 21h

;二进制数传给DX ;置位数8 ;字符串首址 si ;调用子程序 ;回车 ;换行 ;结束符

;打印字符串

mov dx,Var16bit mov cx,16

lea si,Show16bit call btrascii

mov [si],byte ptr 0dh mov [si+1],byte ptr 0ah mov [si+2],byte ptr '$' lea dx,Show16bit mov ah,9h int 21h

mov ah,4ch int 21h

main endp

btrascii proc cmp cx,8 jne l1 mov dh,dl l1:

mov al,0 rol dx,1 rcl al,1 add al,30h mov [si],al inc si loop l1 ret

btrascii endp

code ends end start

;看cx是否为8

;将8位二进制数移到dx高8位

;dx左循环一次,将当前最高位给CF

;al带进位左循环一次,得到CF,即dx最高位 ;将此位数转换成ascii码

;循环cx次

(10) 将一个给定的二进制数按位转换成相应的ASCII码字符串,送到指定的存储单元,如二进制数10010011转换成字符串为‘10010011’。要求将转换过程写成子程序,且子程序应具有较好的通用性,而必须能实现对8位和16位二进制数的转换。(用堆栈实现传参:可以选择用子过程来平衡堆栈,也可以用调用过程来实现平衡堆栈,程序功能说明中要指出)

测试数据:Var8bit byte 10010011B Var16bit word 1010001111000100B


汇编实验三(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2017年牛津译林版英语3A全册教案(含教学反思)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: