ZKX's LAB

将寄存器AL八位二进制数颠倒

2020-07-16知识15
汇编中如何用移位指令将寄存器AL中的8位二进制数颠倒,即最高位变最低位 mov cx,8 xchg ah,al Shift: rcr ah,1;带进位循环右移1位,对应位进入进位标志位 rcl al,1;带进位循环左移1位,进位标志位填补空位 loop Shift 将EAX寄存器中的32位数分成4组,每组8位,然后把这4组数分别放在AL,BL,CL,DL中 push eax mov ecx,8 shr eax,cl mov bl,al shr eax,cl mov cl,al mov dl,ah pop eax 1111 1111 1111 1111 1111 1111 1111 1111 dl cl bl al 编写程序段将寄存器AL中的8位二进制数的内容颠倒过来,即将原来的最高位变为最低位,次高位变次低位 neg al sub al,01h 汇编中,不使用乘法指令,只用加法指令,以及AL BL 标志寄存器实现两个八位二进制正整数的乘法功能 CODE SEGMENT ASSUME CS:CODE ORG 100H START:PUSH CS POP DS PUSH CS POP ES MOV AL,255 MOV BL,255 CALL MULT CALL DISPAX MOV AH,4CH INT 21H 被乘数放置于al 中,乘数放置于 bl中,结果放置于ax中 MULT PROC NEAR PUSH DX PUSHF MOV AH,0 MOV DX,0 CMP BL,0 JE@MULTEXIT MULT1:SHR BL,1 JNC@MULT2 ADD DL,AL ADC DH,AH MULT2:SHL AL,1 RCL AH,1 CMP BL,0 JNE@MULT1 MOV AH,DH MOV AL,DL POPF POP DX RET MULTEXIT: MOV AX,0 POPF POP DX RET MULT ENDP 将要显示的无符号数置于 ax 中 DISPAX PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX PUSH SI PUSH DI PUSH BP PUSHF PUSH DS PUSH CS POP DS MOV BYTE PTR NZ,0 PUSH AX LEA SI,DIVARR MOV CX,5 1: POP AX MOV DX,0 MOV BX,[SI] DIV BX PUSH DX CMP AL,0 JNE@2 CMP BYTE PTR NZ,1 JE@2 CMP CX,1 JE@2 MOV DL,20H JMP@3 2: ADD AL,30H MOV DL,AL MOV BYTE PTR NZ,1 3: MOV AH,2 INT 21H INC SI INC SI LOOP@1 POP DX POP DS POPF POP BP POP DI POP SI POP DX POP CX POP BX POP AX RET DIVARR DW 10000,1000,100,10,1 NZ DB 0 DISPAX ENDP CODE ENDS END START 汇编语言:编写一个程序,显示AL寄存器中的两位十六进制数 data segmentdata endsstack segment db 256 dup?stack endscode segmentassume cs:code,ds:data,ss:stackstart:mov ax,data mov ds,ax mov ax,stack mov ss,ax mov al,0c5... 用汇编语言编程,将8位寄存器(如AL)中的数值以十进制的形式显示在计 code segment assume cs:code org 100h start:push cs pop ds push cs pop es mov al,99 call dispnum mov ah,4ch int 21h dispnum proc near push ax push bx push cx push dx push si push di push bp pushf 将要显示的数据放入AL中 mov ah,0 mov cl,10 div cl mov byte ptr[@y+4],ah;保存个位 add byte ptr[@y+4],30h;个位转ASC2 mov ah,0 div cl mov byte ptr[@y+3],ah;保存十位 add byte ptr[@y+3],30h;十位转ASC2 mov ah,0 mov byte ptr[@y+2],al;保存百位 add byte ptr[@y+2],30h;百位转ASC2 mov ah,9 lea dx,@y int 21h popf pop bp pop di pop si pop dx pop cx pop bx pop ax ret y db 10,13,0,0,0,'$' dispnum endp code ends end start 汇编语言中al是八位寄存器,最高位是符号位吗?我怎么知道到底是不是带符号数啊?纠结。。 有符号数和无符号数的指令是不同的 如比较大小时 分别用JG/JL JA/JB进行比较! 汇编语言中al是八位寄存器,最高位是符号位吗?我怎么知道到底是不是带符号数啊?纠结。。 有符号数和无符号数的指令是不同的 如比较大小时 分别用JG/JL JA/JB进行比较! 将al寄存器数值按二进制显示出来,用子程序调用方式调用此功能? 因为bl寄存器是8位的,所以计数值的初值为8,存放于cx当中。将bl的值一位一位地移动到CF中,每移动一位,就判断这一位是1还是0。如果是1,就将‘1’的ASCII码31H放到DL寄存器中,如果是0,就将‘0’的ASCII码30H放到DL寄存器中。然后调用INT21H的显示功能,显示DL中的ASCII码。这样循环8次,就将bl中的8位数据用8个ASCII码显示出来了。 汇编中如何用移位指令将寄存器AL中的8位二进制数颠倒,即最高位变最低位 汇编中如何用移位指令将寄存器AL中的8位二进制数颠倒,即最高位变最低位 mov cx,8 xchg ah,al Shift:rcr ah,1;带进位循环右移1位,对应位进入进位标志位 rcl al,1;...

#指令寄存器#数据寄存器

随机阅读

qrcode
访问手机版