汇编学习---顺序程序设计

题目要求:

将HEX为起始的地址的2个十六进制(ASCII码)转化为8位二进制数存入BIN单元。

题目分析:

此题目是典型的汇编中进制之间的转换问题,方法有多种,但大致思路都是一样的,在这里采用构造进制转化表的方法实现转化。

代码实现

data segment
	 org 1000h
    BIN  db ?
    HEX  db '3B' 	;数据准备,及将要转化的数据
	 org 1030h
	 db 00h,01h,02h,03h,04h,05h,06h,07h,08h,09h    ;0~9对应的二进制转化表
	 org 1041h
	 db 0Ah,0Bh,0Ch,0Dh,0Eh,0Fh		       ;A~F对应的二进制转化表
data ends

code segment
assume cs:code,ds:data
start:
	 mov ax,data
	 mov ds,ax
	 mov al,HEX
	 xor ah,ah
	 mov bx,offset BIN
	 add bx,ax
	 mov dl,[bx]
	 mov cl,4
	 shl dl,cl
	 mov al,HEX+1
	 xor ah,ah
	 mov bx,offset BIN
	 add bx,ax
	 mov al,[bx]
	 or al,dl
	 mov BIN,al
	 mov ax,4c00h
	 int 21h
code ends
end start
	 	 	 


--------------------------------------------------------------------------------------------------------
题目要求:
编写一个小程序实现26/2 +18*2的计算,并将结果存在一个叫result的单元中。
题目分析:
此题为一道典型的顺序程序设计题,对于/2和*2可以考虑分别右移和左移一位实现即可。
代码实现:
data segment
	result db ?    ;声明用于保存计算结果的变量
data ends
code segment
assume cs:code,ds:data
start:
	 mov ax,data
	 mov ds,ax 
	 mov al,1AH		;将26(1A)赋值给al寄存器,然后右移一位实现/2
	 shr al,1
	 mov bl,al 
	 mov al,12H     ;将18(12h)赋值给al寄存器,然后左移一位实现*2
	 shl al,1
	 add al,bl
	 mov result,al	 
	 mov ax,4c00h
	 int 21h
code ends
end start
	 


你可能感兴趣的:(c,汇编,hex)