This video explains how subtraction is performed in microprocessors, focusing on the ARM architecture. It details the use of two-complement arithmetic and instruction sets (SUB, SUBS, RSB, RSBS) to achieve subtraction using the processor's addition circuitry. The video uses code examples to illustrate the process and highlights differences in how the carry flag behaves between ARM and other architectures.
SUB and SUBS Instructions: The SUB instruction performs subtraction and SUBS updates the status register as well. Both operate by calculating the two's complement of the subtrahend, adding it to the minuend, and storing the result.RSB and RSBS Instructions: These instructions perform reverse subtraction (subtrahend - minuend), with RSBS also updating the status register.SBS instruction handles subtraction of multi-word numbers (greater than 32 bits).en esta ocasión hablaremos sobre la resta en la resta el microprocesador rm y la mayoría de los procesadores modernos usan el método de complemento a 2 todos los cpu contienen un circuito para realizar sumas podría ser redundante diseñar un circuito separado para realizar la resta y se puede realizar con el circuito de sumas objetivos utilizar las instrucciones para realizar restas identificar el efecto de instrucciones de resta que modifican las banderas de estado veamos las primeras dos instrucciones para realizar restas y sub s la diferencia es que la última actualiza el registro de estado se puede resumir los pasos que el hardware del procesador ejecuta para ejecutar las instrucciones sub o suv s 1 calcular el complemento a 2 del sustrayendo operando 22 sumarlo al mundo operando rn 3 colocar el resultado en el destino rd 4 actualizar las banderas en cps s r si se utiliza la instrucción psuv s veamos los pasos que se realizan en la ejecución del siguiente programa en la línea 9 cargamos el valor es encima al 4 f en el registro r 2 la línea 10 carga 39 ejes estiman en el registro r 3 la línea 11 realiza la resta de r 2 - r 3 y almacena el resultado en r 1 en la línea 13 utilizamos la función print efe para mostrar el resultado repasemos las operaciones que realiza el procesador para ejecutar la resta primero se obtiene el complemento a 2 de 0 x 39 el cual es 0 x efe efe efe efe efe efe ce 7 luego se realiza la suma del complemento a 2 obtenido más el minuto 0 x 0 0 0 0004 efe obteniendo el resultado de 16 al realizar la suma obtenemos al final un acarreo de 1 por lo que la bandera c es igual a 1 y la bandera z es igual a 0 puesto que el resultado no es igual a 0 tenga en cuenta que a diferencia de la cpu x86 rm no invierte el indicador de acarreo después de su s por lo que se iguala a 0 cuando hay acarreo y se iguala 1 cuando no lo hay significa que después de la ejecución de su s si se iguala 1 el resultado es positivo si se iguala 0 y el resultado es negativo y el destino tiene el complemento 2 del resultado normalmente el resultado se deja en el complemento de 2 pero puede tomar el complemento de 2 del resultado invertirlo y sumarle 1 para obtener el número recordando que es negativo veamos otro ejemplo analice el siguiente trozo de código primero cargamos 0 x 4 en el registro r 1 luego el valor 0 x 6 en el registro r 2 después se realiza la resta de r 1 - r 2 y se guarda el resultado en r 0 qué pasó realiza el procesador para ejecutar la resta primero obtiene el complemento a 2 de 0 x 4 c el cual es 0 x efe efe efe efe efe efe b 4 luego se realiza la suma del complemento a 2 obtenido más el minuto 0 x 0 0 0 0 0 0 6 resultado igual a 22 la bandera se iguala 1 puesto que hay un acarreo final lo que indica que el resultado es positivo la instrucción sbs es utilizada para restar números multi palabras que son mayores de 32 bits en otras arquitecturas el cpu invierte la bandera ce después de la resta por lo tanto la bandera de acarreo es el bit de acarreo de la resta pero en la rm la bandera de acarreo no es invertida después de la operación y será el inverso del acarreo esta diferencia no afecta el uso de la instrucción s veces porque en otras arquitecturas la resta con acarreo se implementa como r de iguala a r n - o p 2 - c pero en la rm es implementada como rd igual rn - 2 - 16 por lo cual la polaridad del bit de acarreo en la resta es compensado por la instrucción sbs analicemos la siguiente porción del programa el cual resta el valor en sexagesimal 21 f 62 56 2 a de 35 f 41 29 63 b después de realizar r5 igual a r 1 - r 0 en la penúltima línea se realiza se iguala 0 cuando la instrucción sbs es ejecutada r 6 es igual a r 3 - r 2 - 1 c esto es igual a 0 x 35 menos 0 x 21 menos 10 igual a 0 x 13 en el formato de la instrucción rsv note la diferencia con la instrucción sub esencialmente son lo mismo excepto por la forma en que los operan dos se restan de manera inversa el psuv se realiza rn - p 2 en rcp se invierte y se ejecuta o p 2 - r n veamos este ejemplo primero cargamos el valor decimal 6 en 1 luego ejecutamos la resta inversa con rsv espacio r 0,1 numeral 0 lo cual realiza r 0 igual a 0 - r 1 para lo cual se obtiene el complemento a 2 de 0 x 6 y se suman observemos al final que no hay acarreo por lo que la bandera c es igual a 0 cambia tus pensamientos y cambiarás tu mundo hasta la próxima